我正在尝试(仍然)学习JMockit的来龙去脉。这又是我不了解的JMockit奇数的另一个示例。使用NonStrictExpectations运行测试就可以了。但是,不能使用MockUp运行。我不知道为什么。有任何想法吗?我正在运行JMockit 1.5。
测试方法:
private List<Foo> getFooList(List<FooStatement> fooStatements){
List<Foo> FooList = new ArrayList<Foo>();
for(FooStatement at: fooStatements){
List<Foo> aList = at.getFoos();
FooList.addAll(aList);
}
return FooList;
}
成功的期望测试
@Test
public void getFooListWithExpectationsTest(
@Mocked final FooStatement mockFooStatement,
@Mocked final Foo mockFoo
){
List<FooStatement> fooStatementList = new ArrayList<>(Arrays.asList(
mockFooStatement,
mockFooStatement
));
new NonStrictExpectations(){{
mockFooStatement.getFoos();
result = new ArrayList<Foo>(Arrays.asList(mockFoo));
}};
List<Foo> fooList = Deencapsulation.invoke(handler, "getFooList", fooStatementList);
Assert.assertTrue(fooList.size() == 2);
}
样机断言错误(0!= 2)
@Test
public void getFooListWithMockUpTest(
@Mocked final FooStatement mockFooStatement,
@Mocked final Foo mockFoo
){
new MockUp<FooStatement>(){
@Mock
public List<Foo> getFoos(){
return new ArrayList<Foo>(Arrays.asList(mockFoo));
}
};
List<FooStatement> fooStatementList = new ArrayList<>(Arrays.asList(
mockFooStatement,
mockFooStatement
));
List<Foo> fooList = Deencapsulation.invoke(handler, "getFooList", fooStatementList);
Assert.assertTrue(fooList.size() == 2);
}
最佳答案
您使用的MockUp<?>
错误。 MockUp<T?
将告诉JMockit重新定义加载到JVM的类,以便代替FooStatement
的实际类初始化,而将它们替换为MockUp<FooStatement
中定义的类。
因此,基本上MockUp<FooStatement>
将自动替换new FooStatement()
的调用。
尝试类似的东西:
@Test
public void getFooListWithMockUpTest(@Mocked final Foo mockFoo){
new MockUp<FooStatement>(){
@Mock
public List<Foo> getFoos(){
return new ArrayList<Foo>(Arrays.asList(mockFoo));
}
};
List<FooStatement> fooStatementList = new ArrayList<>(Arrays.asList(
new FooStatement(),
new FooStatement()
));
List<Foo> fooList = Deencapsulation.invoke(handler, "getFooList", fooStatementList);
Assert.assertTrue(fooList.size() == 2);
}
关于java - JMockit-期望vs MockUp <T>为什么一个有效而另一个无效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28702346/