|
From: Bill L. <bi...@ji...> - 2003-07-17 15:07:21
|
Nat et al,
Thanks for the advice - I can change that code (I'm new to the class). I
have a few more questions:
1) Why should I keep using a ReturnObjectBag as an internal object? In
my example, does it its use benefit me, or can I use it in a better way?
2) If I shouldn't mess with the internal Hashtable, why is it exposed?
Seems like poor design then.
3) Any reason there's no Javadocs for any of these classes? :) Having
better documentation would have steered me away from using the internal
hashtable probably.
Cheers,
--Bill
Nat Pryce wrote:
> Try using the putObjectToReturn and getNextReturnObject methods rather than
> messing around with the ReturnObjectBag's internal hash table.
>
> Cheers,
> Nat.
>
> ----- Original Message -----
> From: Bill Lynch
> To: <moc...@li...>
> Sent: Thursday, July 17, 2003 2:37 PM
> Subject: Re: [MO-java-users] setting attributes in a mock request
>
>>Guys,
>>
>>I took Steve's advice and created my own extention to
>>MockHttpServletRequest - my first attempt is below:
>>
>>private class MyMockHttpServletRequest extends MockHttpServletRequest {
>>
>> private Hashtable attributes;
>>
>> public JiveMockHttpServletRequest() {
>> attributes = new Hashtable();
>> }
>>
>> public Object getAttribute(String s) {
>> return attributes.get(s);
>> }
>>
>> public Enumeration getAttributeNames() {
>> return attributes.elements();
>> }
>>
>> public void setAttribute(String s, Object o) {
>> attributes.put(s,o);
>> }
>>}
>>
>>After doing this and reading Jeff's mail I implemented it with a
>>ReturnObjectBag - however, I don't see what that buys me:
>>
>>private class MyMockHttpServletRequest extends MockHttpServletRequest {
>>
>> private ReturnObjectBag attributes;
>>
>> public MyMockHttpServletRequest() {
>> attributes = new ReturnObjectBag("attributes");
>> }
>>
>> public Object getAttribute(String s) {
>> return attributes.getHashTable().get(s);
>> }
>>
>> public Enumeration getAttributeNames() {
>> return attributes.getHashTable().elements();
>> }
>>
>> public void setAttribute(String s, Object o) {
>> attributes.getHashTable().put(s,o);
>> }
>>}
>>
>>Is there a benefit to either approach? Both work perfectly in my test
>>case and I'm more inclined to go with the first approach just because
>>it's simpler (and the ReturnObjectBag does nothing for me in this case).
>>
>>Cheers,
>>--Bill
>>
>>Jeff Martin wrote:
>>
>>>Should probably be a ReturnObjectBag as this lets you setup a list of
>>>return values for a key.
>>>
>>>
>>>On Thu, 2003-07-17 at 08:47, Steve Freeman wrote:
>>>
>>>
>>>>This implementation /is/ a little hazy.
>>>>
>>>>The idea is that you should preload your attributes in the order in
>>>>which they are requested, and then they'll just be returned as the code
>>>>runs. It's not actually doing a lookup. Checking which attributes are
>>>>asked for is actually a separate concept and handled by a different
>>>>expectation. There are some arguments for doing this but it does look a
>>>>little clumsy.
>>>>
>>>>If you don't like this, I suggest you replace this part of the mock
>>>>request with an ExpectationMap which might be closer to the behaviour
>>>>you want.
>>>>
>>>>S.
>>>>
>>>>Bill Lynch wrote:
>>>>
>>>>
>>>>>All,
>>>>>
>>>>>I haven't been able to figure out how to set attributes in a
>>>>>MockHttpServletRequest. I searched the mailing list archives for clues,
>>>>>but didn't find any (and there's no javadocs for that class!).
>>>>>
>>>>>The method that looks like it might work only takes one param:
>>>>>
>>>>>request.setupGetAttribute(Object)
>>>>>
>>>>>I'd expect that to be
>>>>>
>>>>>request.setupGetAttribute(String, Object)
>>>>>
>>>>>I've also tried passing in a vector of name/value pairs to that method,
>>>>>but when I call getAttribute(String) on that request object I get this
>>>>>error:
>>>>>
>>>>>There was 1 failure:
>>>>>1)
>>
>>>>testGetAttribute(com.foo.util.MyTest)junit.framework.AssertionFailedError
>
> :
>
>>>>>attributes has run out of objects.
>>>>> at
>>
>>>>com.mockobjects.ReturnObjectList.nextReturnObject(ReturnObjectList.java:6
>
> 1)
>
>>>>> at
>>
>>>>com.mockobjects.servlet.MockHttpServletRequest.getAttribute(MockHttpServl
>
> etRequest.java:58)
>
|