0
接近100%,我想测试的主要方法。 我只创建一个类的实例,它应该启动 应用程序。测试和代码如下所示:测试主要方法与jmockit
public class MainTest {
@Test
public void delegates_to_Launcher_instance(@Mocked Launcher launcher) {
String[] args = {"i"};
Main.main(args);
new Verifications() {{ launcher.run(args); }};
}
}
public class Main {
public static void main(String[] args) {
new Launcher().run(args);
}
}
public class Launcher {
public void run(String[] args) {
}
}
完美地工作!
现在,Launcher类有点多余,覆盖率不是100%,因为Main的构造函数未被调用。双方可以通过从启动代码转移到主,这样痊愈:
public class MainTest {
@Test
public void delegates_to_Main_instance(@Mocked Main main) {
String[] args = {"i"};
Main.main(args);
new Verifications() {{ main.run(args); }};
}
}
public class Main {
public static void main(String[] args) {
new Main().run(args);
}
}
但是当我这样做,JMockit有抱怨:
Missing invocation to:
mmm.Main#run(["i"])
on mock instance: [email protected]
at mmm.MainTest$1.<init>(MainTest.java:15)
at mmm.MainTest.delegates_to_Main_instance(MainTest.java:15)
Caused by: Missing invocation
at mmm.Main.run(Main.java)
... 2 more
任何人都可以解释,这是怎么回事呢?
无关:阅读Java命名约定。使用_仅适用于SOME_CONSTANTS - 但“_”不会进入方法名称! – GhostCat
GhostCat的回答是正确的。我只会补充说,在这里使用嘲讽的想法很糟糕。一个好的测试验证了给定的类“A”解决了它应该解决的*有意义的业务问题*,而不是它在类“B”中调用某种方法。此外,不应编写测试以增加*代码*覆盖率,而是要增加*业务需求覆盖率*。否则,你会得到一堆不仅价值不高的测试,而且会阻止你/他人创建那些实际上很重要的测试。嘲笑只在特殊情况下才有用 - 除此之外它是有害的。 –