JMockit中私有方法的验证
Verification of private method in JMockit
我想验证在我的 JMockit 测试中是否调用了私有方法 class。我不想模拟私有方法,只确保它已被调用。
这可能吗?如果可能的话怎么办?
(我发现了一个类似的问题,但是私有方法被嘲笑了,如果可以避免的话,我不想要。)
这是我想要做的事情的一个例子。
public class UnderTest {
public void methodPublic(){
.....
methodPrivate(aStringList);
.....
}
private void methodPrivate(List<String> slist){
//do stuff
}
}
public class TestMyClass {
@Tested
UnderTest cut;
@Mocked
List<String> mockList;
@Test
public void testMyPublicMethod() {
cut.methodPublic();
new Verifications() {
{
// this doesnt work for me...
invoke(cut, "methodPrivate", mockList);
times = 1;
}
}
}
}
你需要一个部分模拟(如果你想知道它是否被触发,你无法避免在这个实例中模拟私有方法 - 验证只能在模拟的方法或实例上完成)。我以前没有使用过 JMockit,但我希望代码看起来类似于:
public class TestMyClass {
@Tested
UnderTest cut;
@Mocked
List<String> mockList;
@Test
public void testMyPublicMethod() {
cut.methodPublic();
new Expectations(UnderTest.class) {{
cut.methodPrivate();
}}
new Verifications() {
{
// this should hopefully now work for you
invoke(cut, "methodPrivate", mockList); //I assume here that you have statically imported the Deencapsulation class
times = 1;
}
}
}
}
我想验证在我的 JMockit 测试中是否调用了私有方法 class。我不想模拟私有方法,只确保它已被调用。
这可能吗?如果可能的话怎么办?
(我发现了一个类似的问题,但是私有方法被嘲笑了,如果可以避免的话,我不想要。) 这是我想要做的事情的一个例子。
public class UnderTest {
public void methodPublic(){
.....
methodPrivate(aStringList);
.....
}
private void methodPrivate(List<String> slist){
//do stuff
}
}
public class TestMyClass {
@Tested
UnderTest cut;
@Mocked
List<String> mockList;
@Test
public void testMyPublicMethod() {
cut.methodPublic();
new Verifications() {
{
// this doesnt work for me...
invoke(cut, "methodPrivate", mockList);
times = 1;
}
}
}
}
你需要一个部分模拟(如果你想知道它是否被触发,你无法避免在这个实例中模拟私有方法 - 验证只能在模拟的方法或实例上完成)。我以前没有使用过 JMockit,但我希望代码看起来类似于:
public class TestMyClass {
@Tested
UnderTest cut;
@Mocked
List<String> mockList;
@Test
public void testMyPublicMethod() {
cut.methodPublic();
new Expectations(UnderTest.class) {{
cut.methodPrivate();
}}
new Verifications() {
{
// this should hopefully now work for you
invoke(cut, "methodPrivate", mockList); //I assume here that you have statically imported the Deencapsulation class
times = 1;
}
}
}
}