我想测试这个使用匿名类调用接口(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/