Проверьте значение параметра с помощью EasyMock - PullRequest
3 голосов
/ 06 мая 2010

Я пытаюсь написать несколько модульных тестов, используя EasyMock и TestNG, и столкнулся с вопросом. Учитывая следующее:

void execute(Foo f) {
  Bar b = new Bar()
  b.setId(123);
  f.setBar(b);
}

Я пытаюсь проверить, что Id of Bar установлен соответствующим образом следующим образом:

@Test
void test_execute() {
  Foo f = EasyMock.createMock(Foo.class);

  execute(f);

  Bar b = ?; // not sure what to do here
  f.setBar(b);
  f.expectLastCall();
}

В моем тесте я не могу просто позвонить f.getBar() и проверить его Id, потому что f это фиктивный объект. Какие-нибудь мысли? Здесь я бы хотел взглянуть на дополнения EasyMock v2.5 andDelegateTo() и andStubDelegateTo()?

О, и просто для записи ... Документация EasyMock дует.

Ответы [ 4 ]

9 голосов
/ 06 мая 2010

Ах, ха!Захват - это ключ.

@Test
void test_execute() {
  Foo f = EasyMock.createMock(Foo.class);

  Capture<Bar> capture = new Capture<Bar>();
  f.setBar(EasyMock.and(EasyMock.isA(Bar.class), EasyMock.capture(capture)));
  execute(f);

  Bar b = capture.getValue();  // same instance as that set inside execute()
  Assert.assertEquals(b.getId(), ???);
}
1 голос
/ 07 мая 2010

Вы пробовали это? `

final Bar bar = new Bar(); 
bar.setId(123);
EasyMock.expect(f.getBar()).andAnswer(new IAnswer<Bar>() {
     public Bar answer() {             
         return bar;
     }
});

Я не уверен в синтаксисе на моей голове, но это должно сработать.

0 голосов
/ 06 мая 2010

Я бы построил объект, который будет equal к тому, который я ожидаю вернуть. В этом случае я бы создал new Bar и установил для его идентификатора значение 123, полагаясь на правильную реализацию equals() и hashCode() для Bar и поведение по умолчанию средства сопоставления аргументов EasyMocks (используя равное сравнение для параметров ).

@Test
public void test_execute() {
    Foo f = EasyMock.createMock(Foo.class);
    Bar expected = new Bar();
    expected.setId(123);
    f.setBar(expected);
    EasyMock.expectLastCall();
    EasyMock.replay(f);

    execute(f);

    EasyMock.verify(f);
}
0 голосов
/ 06 мая 2010
f.setBar(EasyMock.isA(Bar.class))

Это обеспечит вызов setBar с классом Bar в качестве параметра.

...