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());