我试图了解单元测试以及如何在测试时获取正确的类, 我很难准确理解幕后发生的事情以及我的用法有多安全/正确。
这是我想要做的一个非常简单的例子,我在这里内联编写它,所以它可能包含一些错误,请尝试忽略它们,尽管它们可能很愚蠢。
一个非常简单的项目目录:
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/