Java 如何测试修改模拟成员的函数?
我对莫基托有意见。我有两个不同的班级。我的目的是测试“设置更改”功能。这是我的第一节课:Java 如何测试修改模拟成员的函数?,java,unit-testing,testing,junit,mocking,Java,Unit Testing,Testing,Junit,Mocking,我对莫基托有意见。我有两个不同的班级。我的目的是测试“设置更改”功能。这是我的第一节课: class M { private String a; private String b; private boolean c = false; public String getA() { return a; } public void setA( String _a ) { a = _a; } public String getC() { return c; } pub
class M {
private String a;
private String b;
private boolean c = false;
public String getA() {
return a;
}
public void setA( String _a ) {
a = _a;
}
public String getC() {
return c;
}
public void setC( final boolean imp ) {
c = imp;
}
}
这是具有“setChanges”功能的主类:
class MyMainClass {
private String getMyA() {
return "Data";
}
private static void setChanges(final M m) {
if (getMyA().equals(m.getA())){
m.setC(true);
}
}
}
如何测试“设置更改”?这意味着如果getA()返回“Data”,我如何检查应该为“true”的getC()?传递满足(或不满足)
getMyA
的M
实例,并验证M#getC
返回true
(或false
,具体取决于测试内容)。无需模拟。谢谢,它可用于以下代码:
@Test
public void testsetChanges(){
}是否有一种在类
M
中设置a
的方法,例如构造函数或setter方法?如果是这样的话,你不需要Mockito。是的,有一个setter方法用于。它由用户设置。然后使用它。将a
设置为“数据”
的M
,将a
设置为“其他东西”
的M
。调用setChanges
两次,并断言每种情况下的输出都是正确的。不需要模拟。另外,您的MyMainClass
实际上并没有编译-您有一个静态方法调用非静态方法,但没有指定调用它的实例。一旦可以编译代码,您会发现测试代码更容易。我认为它不起作用,因为“setChanges”是静态void函数。它可以正常工作,因为您无论如何只能测试传递给您的方法的M
的实例。@test public void testsetChanges(){MyMainClass mmc=new MyMainClass();M M=new M();M.setA(“数据”);mmc.setChanges(M);assertTrue(M.getC());}
MyMainClass mmc = new MyMainClass ();
M m = new M();
m.setA("Data");
Method method = MyMainClass.class.getDeclaredMethod(
"setChanges",
M.class
);
method.setAccessible(true);
method.invoke(method, m );
assertTrue(m.getC());