Java 函数的Junit测试
对于Junit测试,我有一个困惑。对于一些具有封闭业务逻辑的函数(添加函数),我们可以通过断言函数来进行单元测试 比如说Java 函数的Junit测试,java,mockito,Java,Mockito,对于Junit测试,我有一个困惑。对于一些具有封闭业务逻辑的函数(添加函数),我们可以通过断言函数来进行单元测试 比如说 public int add(int a,int b){ int c = a+b; return c; } public int foo(int totalnum){ Zoo soo = new Zoo(); int giraffNumber = soo.giraffe(totalnum);//here we are calling another meth
public int add(int a,int b){
int c = a+b;
return c;
}
public int foo(int totalnum){
Zoo soo = new Zoo();
int giraffNumber = soo.giraffe(totalnum);//here we are calling another method
return giraffNumber;
}
但是对于路线中的某些功能(如下面的示例),我们必须采用什么方法
比如说
public int add(int a,int b){
int c = a+b;
return c;
}
public int foo(int totalnum){
Zoo soo = new Zoo();
int giraffNumber = soo.giraffe(totalnum);//here we are calling another method
return giraffNumber;
}
对于这类方法,我们需要做什么?我们是否需要编写另一个类
谁能给我举个例子吗 单元测试的教条式方法是,您一次只能测试一件事情,这意味着您不允许在要测试的代码中使用
new
,因为这必然会在您已经开始测试的事情之外再创建一件事情
解决这个问题的方法是依赖注入。这意味着您的代码不是从那里获取其依赖项(例如使用new
创建代码想要使用的类),而是从外部向您的代码提供其依赖项
因此,在foo()
的情况下,这意味着要么将Zoo
的实例作为参数传递给foo()
,要么更好的是,将Zoo
工厂作为构造函数参数传递给包含foo()
的类,这样foo()
可以调用工厂以获取Zoo
的实例
通过这种方式,您可以传递一个特制的Zoo
实现以用于测试,例如在mockito
的帮助下创建的实现
当然,还有一种非教条式的单元测试方法,即您应该将要测试的每件事情都视为一个黑盒子,而不必担心它是如何实现的,而只需担心为某个输入获得正确的结果。还有人指出,这不是单元测试,而是集成测试。然后认识到没有单元测试,只有集成测试。但现在我们已经进入了哲学领域。理想情况下,你可以将局部变量转换为类的一个字段。或者,可能不是动物园对象,而是动物园对象的工厂 该因子通过依赖项注入插入。现在,您可以使用Mockito之类的模拟框架让工厂实例返回模拟的Zoo对象
也就是说,你可以控制这些物体。关键是不要为业务逻辑对象调用新对象 你有一些选择。要么在测试系统中包含Zoo,要么进行一些模拟。如果要用Mockito模拟
soo
,可能需要重构此代码。看看Mockito维基。