Java单元测试路径匹配

标签 java unit-testing junit

我试图了解单元测试以及如何在测试时获取正确的类, 我很难准确理解幕后发生的事情以及我的用法有多安全/正确。

这是我想要做的一个非常简单的例子,我在这里内联编写它,所以它可能包含一些错误,请尝试忽略它们,尽管它们可能很愚蠢。

一个非常简单的项目目录:

ba/src/main/java/utils/BaUtils.java ba/test/main/java/utils/BaUtilsTest.java notBa/src/main/java/im/BaObj.java

BaUtils.java代码:

package com.ba.utils;
import notBa.im.BaObj;
public class BaUtils{
    public String doSomething(BaObj obj){
        obj.doSomething();
    }
}

我想在不实际调用 doSomething 的情况下测试 BaUtils,并且我无法更改 BaObj 类或 notBa 包上的任何内容。我知道我可以(“可以”我的意思是它会起作用)向“ba”项目添加一个新的java文件(ba/test/java/notBa/main/java/im/BaObj.java) 将与原始 BaObj 具有相同的包,并且在运行时测试将导入这个包而不是真正的包,因此测试了 BaUtils 代码,但测试了 BaObj 代码没有执行。
应该看起来像这样:

package notBa.im.Baobj
public class BaObj{
    public void doSomething(){
        System.out.println("Did something");
    }
}

我的问题是(感谢您到目前为止):

这是如何工作的(阅读引用文献会很棒)。
这种测试建筑被认为是“好”还是“安全”?

谢谢!

最佳答案

解决方案是使用模拟框架(我自己喜欢 Mockito)。

测试看起来像这样:

class BlaUtilTes{
  @Rule
  public MockitoRule mockitoRule = MockitoJUnit.rule();

  @Mock
  Blaobj blaobj;

  @Test
  public void doSomething_WithMockedBlaobj_callsDosomethingOnBlaobj(){
    // arrange
    BlaUtil blaUtil= new BlaUtil();
    // act
    blaUtil.doSomething(blaobj);
    // assert
    Mockito.verify(blaobj).doSomething();
  }
}

在此处查找更多信息 http://www.vogella.com/tutorials/Mockito/article.html#testing-with-mock-objects

关于Java单元测试路径匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40574951/

相关文章:

java - 我如何使用 JUnit 测试 void actionEvent 中的信息

java - 如何在hibernate中使用hql查询进行级联

JavaFX 应用程序在 Debian 上抛出空指针异常

unit-testing - 单元测试显示输出

c# - 对 WCF 服务进行单元测试

java - 在测试类中模拟私有(private)静态最终变量

java - JerseyTest 不满足依赖关系(依赖注入(inject))

java - 使用 Spring 包作为外部库

java - 使用 createAndShowGUI() 方法时如何将图标设置为 JFrame?

java - 如何在 JUnit 5 中使用字符串数组进行参数化