Java 预期中的JMockit模拟构造函数
我试图在Expectations块中设置构造函数调用的结果,但测试代码中的构造函数调用不会返回我设置的结果。必须有不同的方法来实现这一点,下面的代码是我的尝试,并且在assertEquals上失败。有人知道怎么做吗 请注意,我想将单元测试与生产代码隔离,我正在测试SomeMapper,因此我想模拟OutputObject(在我的真实代码中,OutputObject是一个复杂的对象,在测试中使用时可能会有意外的行为)Java 预期中的JMockit模拟构造函数,java,constructor,mocking,jmockit,expectations,Java,Constructor,Mocking,Jmockit,Expectations,我试图在Expectations块中设置构造函数调用的结果,但测试代码中的构造函数调用不会返回我设置的结果。必须有不同的方法来实现这一点,下面的代码是我的尝试,并且在assertEquals上失败。有人知道怎么做吗 请注意,我想将单元测试与生产代码隔离,我正在测试SomeMapper,因此我想模拟OutputObject(在我的真实代码中,OutputObject是一个复杂的对象,在测试中使用时可能会有意外的行为) 这次考试没有什么可嘲弄的。只需在测试中实例化一个InputObject,在调用m
这次考试没有什么可嘲弄的。只需在测试中实例化一个
InputObject
,在调用map
时传递它,然后验证返回的OutputObject
@Rogério您的意思是只断言OutputObject属性的值?我发布的代码就是一个例子来说明这个问题,在我的“真实”代码中,OutputObject是一个复杂的类,需要大量的代码来实例化,所以我想模拟它并验证构造函数调用。我可能还需要编写一个验证块,在其中我想验证是否调用了某些setter方法。只需在测试中实例化一个InputObject
,在调用map
时传递它,然后验证返回的OutputObject
@Rogério您的意思是只断言OutputObject属性的值?我发布的代码就是一个例子来说明这个问题,在我的“真实”代码中,OutputObject是一个复杂的类,需要大量的代码来实例化,所以我想模拟它并验证构造函数调用。我可能还需要编写一个验证块,在该块中我希望验证是否调用了某些setter方法。
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);
}
}