Hmm .....I can't pinpoint the exact problem but if it were up to me I would
start out by changing things to look more like:

public void setUp() {
   ...
   webRequest = createMock(WebRequest.class);
   expect(webRequest.getSession(true)).andReturn(webSession);
   ...
 }

public void testGetSaving(Product product) throws Exception{

     viewProductDetail.setProduct(product); // this looks suspicious - if
it's a mock then what you are
// telling easymock is that it should expect someone to call
setProduct(product) when you invoke getSaving() ?
     expect(viewProductDetail.getSaving()).andReturn(saving);

     replay();

     saving = viewProductDetail.getSaving();

     verify();

     assertEquals(saving, 0.02);
}

On 6/1/07, Ray McBride <[EMAIL PROTECTED]> wrote:

Hi,

Thanks for you quick reply.

Sorry, my fault, I must have deleted these while removing my sysouts for
this post.

I have tried using these but unfortunately receive the same exception. I
have also done several searches on google, which seems to suggest the
exception is caused by the omission of the replay() method. However
their inclusion doesn't seem to change anything.

My updated methods are:

public void setUp() {
    ...
    webRequest = createMock(WebRequest.class);
    expect(webRequest.getSession(true)).andReturn(webSession);
    replay();
    webSession = webRequest.getSession(true);
    verify();
    ...
  }

public void testGetSaving(Product product) {
    try
    {
      viewProductDetail.setProduct(product);
      expect(viewProductDetail.getSaving()).andReturn(saving);
      replay();
      saving = viewProductDetail.getSaving();
      verify();
      assertEquals(saving, 0.02);
    }
    catch(RuntimeException e){
      System.out.println(e.toString());
    }

Thanks for any help

Ray

Jesse Kuhnert wrote:
> You still need to call the replay() / verify() easymock methods, which
> can
> be examined further here:
>
> http://easymock.org/EasyMock2_2_Documentation.html
>
> I think getSession(boolean) also returns a value - so you'd have to
> define
> what that return value is with a statement like:
>
> expect(webRequest.getSession(true)).andReturn(session); (or
> andReturn(null)
> ) .
>
> On 6/1/07, Ray McBride <[EMAIL PROTECTED]> wrote:
>>
>> Hi All,
>>
>> We have recently upgrading one of our apps to Tapestry 4.1 and I have
>> been asked to write some unit tests for the existing components.
>>
>> I am new to Tapestry, TestNG and Easymock, so please bear with me.
>>
>> I am trying to get the test to run through an if statement, but I keep
>> getting the following runtime exception:
>>
>> java.lang.IllegalStateException: missing behavior definition for the
>> preceeding method call getSession(true)
>>
>> The class for the component is as follows:
>>
>> public abstract class ViewProductDetail extends BaseComponent
>> {
>> @InjectObject("infrastructure:request")
>>   public abstract WebRequest getRequest();
>>   public abstract void setRequest(WebRequest webRequest);
>>
>>   @InjectState("visit")
>>   public abstract Visit getSession();
>>
>>     public Double getSaving()
>>   {
>>     ...
>>
>>       if(getRequest().getSession(false) != null)
>>       {
>>         Visit visit = getSession();
>>         String discountcode = visit.getDiscountCode();
>>         Double saving = new Double(rrp.getValue().doubleValue() -
>>                     price.getValue(discountcode).doubleValue());
>>         return saving;
>>       }
>>       else
>>       {
>>         ...
>>     }
>>   }
>>
>> My Test class is as follows:
>>
>> public class ViewProductDetailTest extends TestBase
>> {
>>   ...
>>
>>   @BeforeClass
>>   public void setUp() {
>>     viewProductDetail = newInstance(ViewProductDetail.class);
>>     webRequest = createMock(WebRequest.class);
>>     webRequest.getSession(true);
>>     viewProductDetail.setRequest(webRequest);
>>   }
>>
>>   @Test (dataProvider = "CreateProduct")
>>   public void testGetSaving(Product product) {
>>     try
>>     {
>>       viewProductDetail.setProduct(product);
>>       Double saving = viewProductDetail.getSaving();
>>       assertEquals(saving, 0.02);
>>     }
>>     catch(RuntimeException e){
>>       System.out.println(e.toString());
>>     }
>> }
>>
>> I'm not sure to the best way to create a session so that my if
statement
>> will be true. I'm trying to use webRequest.getSession(true), but  it
>> doesnt seem to work and I don't know if there is a better way or if I
>> have missed something.
>>
>> Thanks for any help
>>
>> Ray
>>
>>
>> ______________________________________________________________________
>> This email has been scanned by the MessageLabs Email Security System.
>> For more information please visit http://www.messagelabs.com/email
>> ______________________________________________________________________
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>
>


______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email
______________________________________________________________________

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




--
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

Reply via email to