java - 模拟静态方法

标签 java junit mockito jmock

我想编写一个测试用例来验证我的类中的方法。 我有本地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 中的静态方法类(class)。我该如何解决这个问题?

最佳答案

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

关于java - 模拟静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13718697/

相关文章:

java - 非静态比较器内部类

java - 无法解析 Java 上 OAuth2 类的导入

java - 使用 Console.readline() 测试 void main 的输出

spring - 如何在 Junit 测试中更改代码中的 Spring 属性文件变量?

java - 如果我使用内部类进行单元测试架构,如何避免忽略测试?

java - 使用 Gradle、JUnit 和 Mockito 的模块化 Java 的推荐项目结构

java - 反序列化映射 Jackson

java - 做一个学校项目,无法正确计算面积

java - 如何检查测试套件在一个环境中运行缓慢的原因

java - 如何使用 Mockito 编写 void 方法的行为?