gpt4 book ai didi

java - 在java中测试如何检查接口(interface)的方法是否被调用?

转载 作者:行者123 更新时间:2023-11-30 09:07:25 25 4
gpt4 key购买 nike

我想测试这个使用匿名类调用接口(interface)方法的类。

public class ClassToTest 
{
public void methodToTest()
{
InterefaceToMock interefaceToMockReference = new InterefaceToMock() {

@Override
public int methodToMock()
{
return 0;
}
};
interefaceToMockReference.methodToMock();
}
}

这是界面

public interface InterefaceToMock 
{
public int methodToMock();
}

我正在使用这个方法来检查是否调用了 methodToMock

import static org.junit.Assert.*;

import org.junit.Test;

import mockit.FullVerificationsInOrder;
import mockit.Mocked;
import mockit.NonStrictExpectations;
public class TestAClass
{
@Mocked InterefaceToMock interefaceToMockReferenceMocked;
@Test
public void test1()
{
new NonStrictExpectations()
{
{
interefaceToMockReferenceMocked.methodToMock();times=1;
}
};
(new ClassToTest()).methodToTest();
new FullVerificationsInOrder(interefaceToMockReferenceMocked)
{
};
assertTrue(true);
}
}

但是测试用例失败了。谁能帮忙。

最佳答案

您的原始测试几乎是正确的。它将模拟字段简单地声明为 @Mocked,它只为您提供一个实现该接口(interface)的模拟实例,而这不是被测试代码使用的实例。然而,JMockit API 有另一个模拟注释,它将模拟扩展到给定基类型的所有实现类,并且默认情况下会影响所述类的所有实例。因此,测试应更改如下:

public class TestAClass 
{
@Capturing InterfaceToMock anyImplementingInstance;

@Test
public void test1()
{
new ClassToTest().methodToTest();

new Verifications() {{
anyImplementingInstance.methodToMock();
}};
}
}

关于java - 在java中测试如何检查接口(interface)的方法是否被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23993645/

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