验证私有方法未执行 JMockit
Verify that a private method was NOT executed JMockit
我四处寻找这个问题,但没有找到我真正需要的东西。我对 JMockit 和模拟有了更多的了解。哪个好。似乎每个人都想知道如何确保某些事情已经执行。我想学习相反的东西。
好的 - 我正在编写一个测试来检查 public 方法中不太愉快的路径。正在测试的方法是 void
所以我不能真正 assert
结果。 我想做的是验证在这个测试用例中没有执行一个方法。
例如:
class ClassToTest {
private void method(String arg){}
public void publicMethod(String arg0, String arg1){
if(false){
//this method should never get called.
method(arg0);
}
}
}
class TestingClass{
@Tested
private ClassToTest classToTest = new ClassToTest();
@Test
public void testCheckingIfPrivateMethodWasCalled(){
classToTest.publicMethod("string1", "string2");
new Verifications() {
{
//At this point I am trying something like
Deencapsulation.invoke(classToTest, "method", "string1");
times = 0; //Also tried maxTimes = 0;
//Through debug it looks like the invoke is doing what it's named...
//invoking the private method, I don't want to invoke.
//How do I check that ClassToTest#method was not called?
}
}
}
}
我得到的测试用例结果是 java.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter
。在 times = 0;
.
线上
我知道 invoke
正在执行私有方法。我挠头试图弄清楚如何 "check" 在没有 invoking/executing 的情况下调用该方法。
谢谢。
一种方法是使用 MockUp API for faking:
import static org.junit.Assert.assertFalse;
import org.junit.Test;
import mockit.Mock;
import mockit.MockUp;
import mockit.Tested;
public class TestingClass {
@Tested
private ClassToTest classToTest = new ClassToTest();
@Test
public void testCheckingIfPrivateMethodWasCalled() {
PrivateMethodCheckMockUp mockUp = new PrivateMethodCheckMockUp() {
@Mock
private void method(String arg) {
calledPrivate = true;
}
};
classToTest.publicMethod("string1", "string2");
assertFalse(mockUp.calledPrivate);
}
class PrivateMethodCheckMockUp extends MockUp<ClassToTest> {
boolean calledPrivate = false;
@Mock
private void method(String arg) {
calledPrivate = true;
}
}
}
我四处寻找这个问题,但没有找到我真正需要的东西。我对 JMockit 和模拟有了更多的了解。哪个好。似乎每个人都想知道如何确保某些事情已经执行。我想学习相反的东西。
好的 - 我正在编写一个测试来检查 public 方法中不太愉快的路径。正在测试的方法是 void
所以我不能真正 assert
结果。 我想做的是验证在这个测试用例中没有执行一个方法。
例如:
class ClassToTest {
private void method(String arg){}
public void publicMethod(String arg0, String arg1){
if(false){
//this method should never get called.
method(arg0);
}
}
}
class TestingClass{
@Tested
private ClassToTest classToTest = new ClassToTest();
@Test
public void testCheckingIfPrivateMethodWasCalled(){
classToTest.publicMethod("string1", "string2");
new Verifications() {
{
//At this point I am trying something like
Deencapsulation.invoke(classToTest, "method", "string1");
times = 0; //Also tried maxTimes = 0;
//Through debug it looks like the invoke is doing what it's named...
//invoking the private method, I don't want to invoke.
//How do I check that ClassToTest#method was not called?
}
}
}
}
我得到的测试用例结果是 java.lang.IllegalStateException: Missing invocation to mocked type at this point; please make sure such invocations appear only after the declaration of a suitable mock field or parameter
。在 times = 0;
.
我知道 invoke
正在执行私有方法。我挠头试图弄清楚如何 "check" 在没有 invoking/executing 的情况下调用该方法。
谢谢。
一种方法是使用 MockUp API for faking:
import static org.junit.Assert.assertFalse;
import org.junit.Test;
import mockit.Mock;
import mockit.MockUp;
import mockit.Tested;
public class TestingClass {
@Tested
private ClassToTest classToTest = new ClassToTest();
@Test
public void testCheckingIfPrivateMethodWasCalled() {
PrivateMethodCheckMockUp mockUp = new PrivateMethodCheckMockUp() {
@Mock
private void method(String arg) {
calledPrivate = true;
}
};
classToTest.publicMethod("string1", "string2");
assertFalse(mockUp.calledPrivate);
}
class PrivateMethodCheckMockUp extends MockUp<ClassToTest> {
boolean calledPrivate = false;
@Mock
private void method(String arg) {
calledPrivate = true;
}
}
}