我想编写一个测试用例,它将验证我的类中的方法。
我的方法中有一个本地ApplicationLauncher对象,必须对其进行模拟,因为它调用了方法launch(),该方法不应在单元测试中调用。

public class RunApp
{
   public void check(String name)
   {
     if(name !=null)
     {
       ApplicationLauncher launcher = Application.getLauncher("launch");
       String appName = name+".bat";
       launcher.launch(appName);
     }
   }
 }


我的JUnit测试代码如下:

RunApp runapp = new RunApp();

@Mock
ApplicationLauncher launcher;

@Test
public void test()
{
  runapp.check("test");
  verify(launcher,atLeastOnce).launch(anyString());
}


我无法返回类似的模拟对象

when(Application.getLauncher(anyString())).thenReturn(launcher);


因为getLauncherApplication类中的静态方法。我该如何解决?

最佳答案

更好的应用程序设计可能是使用ApplicationLauncher作为接口并创建生产和测试实现(或仅模拟测试实现)。您可能需要将ApplicationLauncher的实例传递到您的RunApp类中,也许是在构造函数中。

08-18 12:03