gpt4 book ai didi

java - JMockit - 期望与 MockUp 为什么一个有效而另一个无效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:34:07 25 4
gpt4 key购买 nike

我正在尝试(仍然)学习 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);
}

MockUp 的断言错误 (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 - 期望与 MockUp<T> 为什么一个有效而另一个无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28702346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com