gpt4 book ai didi

java - 正确使用 Mockito.verify

转载 作者:行者123 更新时间:2023-11-29 05:35:07 38 4
gpt4 key购买 nike

我是单元测试的新手,我有一个关于 Mockito 中使用的 verify 方法用法的简单问题。这是我用于测试的类(class)。

public class Foo{
int n = 0;
void addFoo(String a){
if(a == "a")
add(1);
}

protected void add(int num){
n =1;
}

public int get(){
return n;
}

这是我的单元测试。

public class FooTest {
@Mock Foo f;

@Test
public void test() {
MockitoAnnotations.initMocks(this);
f.addFoo("a");

//Passes
Mockito.verify(f).addFoo("a");

//Fails
Mockito.verify(f).add(1);
}

我得到一个

   Wanted but not invoked:
f.add(1);
-> at FooTest.test(FooTest.java:22)

However, there were other interactions with this mock:
-> at FooTest.test(FooTest.java:16)

异常。

如何验证调用了 add(int num)

最佳答案

我认为您误解了 verify 的要点.在你的测试中,Foo f是一个模拟对象 - Foo的内部实现被忽略,只会发生您在其上记录的行为(使用 when(f.someMethod().thenXXX )。

模拟和验证的重点是在忽略内部实现的同时测试交互。在此示例中,您可能有另一个类使用 Foo ,并且您想要测试它是否调用给定 Foo 的正确方法实例。

简单示例:

假设您有一个使用 Foo 的类您在问题中提出的类(class):

public class FooUser {
private Foo f;

public void setFoo(Foo f) {
this.f = f;
}

public Foo getFoo() {
return f;
}

public void addToFoo(String string) {
f.add(string);
}
}

现在,您要测试 FooUser#addToFoo(String)确实调用了正确的 add(String) Foo的方法| :

@RunWith (MockitoJUnitRunner.class)
public class FooUserTest {
@Mock Foo f;
FooUser fUser;

@Before
public void init() {
fUser = new FooUser();
fUser.setFoo(f);
}

@Test
public void test() {
fUser.addToFoo("a");
Mockito.verify(f).addFoo("a");
}

关于java - 正确使用 Mockito.verify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782926/

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