Я пытаюсь установить результат при вызове конструктора в блоке Expectations, но вызов конструктора в протестированном коде не возвращает результат, который я устанавливаю. Должен быть другой способ сделать это, приведенный ниже код - моя попытка, и она не работает на assertEquals. Кто-нибудь знает, как это сделать?
Обратите внимание, что я хочу изолировать свой модульный тест от производственного кода, я тестирую SomeMapper, поэтому я хочу смоделировать OutputObject (в моем реальном коде OutputObject является сложным объектомкоторые могут иметь неожиданное поведение при использовании в тесте)
public class SomeMapperTest
{
// "production code"
public class InputObject
{
private long one, two;
private String name;
public long getOne()
{
return one;
}
public long getTwo()
{
return two;
}
public String getName()
{
return name;
}
}
public class OutputObject
{
public OutputObject(String name, MyObject myObject1, MyObject myObject2)
{
}
}
public class MyObject
{
public MyObject(long l)
{
}
}
public class SomeMapper
{
public OutputObject map(InputObject input)
{
return new OutputObject(input.getName(), new MyObject(input.getOne()), new MyObject(input.getTwo()));
}
}
// end "production code"
// test code begins here...
//@Tested
private SomeMapper someMapper = new SomeMapper();
@Test
public void testMap(@Mocked InputObject input, @Mocked MyObject myObject1, @Mocked MyObject myObject2, @Mocked OutputObject expectedResult)
{
final String NAME = "name";
final long ONE = 1L;
final long TWO = 2L;
new Expectations()
{{
input.getName();
result = NAME;
input.getOne();
result = ONE;
input.getTwo();
result = TWO;
new MyObject(ONE);
result = myObject1;
new MyObject(TWO);
result = myObject2;
new OutputObject(NAME, myObject1, myObject2);
result = expectedResult;
}};
OutputObject result = someMapper.map(input);
assertEquals("Not same!", expectedResult, result);
}
}