2015-03-20 4 views
0

Я новичок в EasyMock, обычно использую Mockito, поэтому, пожалуйста, извините это, если это глупый вопрос, но у меня есть ожидание, которое использует одно из полей из класса, который я тестирую. Проблема в том, что, поскольку выполнение выполняется до вызова метода фактически, поле имеет значение null.EasyMock Expect Значение поля Null

public class ClassToTest { 
    SomeObject someObject = null; 
    AnotherObject anotherObject; 

    public String testMethod() { 
     someObject = new SomeObject(); 
     String result = anotherObject.someMethod(someObject); 
     System.out.println(result); 
    } 

    // Some other code here 
} 

ClassToTest testClass = new ClassToTest(); AnotherObject mockedObject = createMock(AnotherObject.class); expect(mockedObject.someMethod(testClass.someObject)).andStubReturn("test"); testClass.testMethod();

В Mockito это было бы написано, как when(mockObject.someMethod(testClass.someObject)).thenReturn("test"); и все SomeObject находится в этой точке выполнения будет использоваться. Однако, используя EasyMock, поскольку someObject имеет значение null в то время, когда настроен вызов ожидания, вызов ожидает значения null в качестве параметра.

Есть ли способ в EasyMock вместо этого получить то, что поле находится в точке в коде, когда someMethod фактически называется?

+1

Я не совсем уверен, что понимаю, откуда возникла «foo» - это то, что вы захватили ранее? – Makoto

+0

Действительно - было бы намного легче понять с помощью короткого, но * полного * примера. –

+0

Я обновил код, очень грубый эскиз логического сценария. – GlenMTB

ответ

1

Я не уверен, что вы можете сделать то, что вы описали с помощью EasyMock.

Вот некоторые варианты:

1)

Если вы хотите принять любой объект типа, то вы можете использовать EasyMock.anyObject (SomeClass.class) в качестве параметра метода

expect(mockedObject.someMethod(EasyMock.anyObject(SomeClass.class)).andReturn("test") 

2)

Вы можете издеваться минусы tructor SomeObject с помощью PowerMock (https://code.google.com/p/powermock/wiki/MockConstructor), а затем ожидайте, что объект, который вы вернули, высмеивая конструктор. Это будет выглядеть как этот

SomeObject myObject = new SomeObject() 
PowerMock.expectNew(SomeObject.class).andReturn(myObject); 
expect(mockedObject.someMethod(myObject)).andReturn("test"); 

Если вы идете маршрут PowerMock, не проверить эту ссылку, поскольку есть некоторые дополнительные линии кодов, которые необходимы при использовании PowerMock.

+0

Think # 2 - это решение, так как мне нужно сделать это для нескольких конкретных экземпляров. Благодаря! – GlenMTB

Смежные вопросы