我是Mockito的新手,正在尝试理解一种方法来对依赖于注入依赖项的类进行单元测试。我想做的是创建依赖项的模拟对象,并使我正在测试的类使用这些对象,而不是Spring注入的常规注入依赖项。我一直在阅读教程,但对如何做到这一点有点困惑。
我有一个类我想这样测试:
package org.rd.server.beans;
import org.springframework.beans.factory.annotation.Autowired;
public class TestBean1 {
@Autowired
private SubBean1 subBean1;
private String helloString;
public String testReturn () {
subBean1.setSomething("its working");
String something = subBean1.getSomething();
helloString = "Hello...... " + something;
return helloString;
}
然后我有了一个类,我想用它作为一个模拟对象(而不是常规的SubBean1
类,如下所示:
package org.rd.server.beans.mock;
public class SubBean1Mock {
private String something;
public String getSomething() {
return something;
}
public void setSomething(String something) {
this.something = something;
}
}
}
我只想试着运行一个简单的测试,如下所示:
package test.rd.beans;
import org.rd.server.beans.TestBean1;
import junit.framework.*;
public class TestBean1Test extends TestCase
{
private TestBean1 testBean1;
public TestBean1Test(String name)
{
super(name);
}
public void setUp()
{
testBean1 = new TestBean1();
// Somehow inject the mock dependency SubBean1Mock ???
}
public void test1() {
assertEquals(testBean1.testReturn(),"working");
}
}
我想一定有一些相当简单的方法来做到这一点,但我似乎不能理解教程,因为我还没有上下文来理解他们正在做/解释的一切。如果有人能在这方面提供一些线索,我将不胜感激。
3条答案
按热度按时间dced5bon1#
如果你使用Mockito,你可以通过调用Mockito的静态mock方法来创建mock。然后你可以把mock传递给你要测试的类。你的setup方法看起来像这样:
然后,您可以为您尝试使用Mockito的静态when方法测试的任何内容向mock对象添加适当的行为,例如:
bzzcjhmw2#
在Mockito中,您并不是真的要创建新的“模拟”实现,而是要通过告诉Mockito在调用方法时返回什么来模拟注入依赖项的接口上的方法。
我使用Mockito编写了一个SpringMVC控制器的测试,并像对待任何其他java类一样对待它。我能够模拟出我拥有的各种其他Springbean,并使用Spring的ReflectionTestUtils注入这些bean,以传递基于Mockito的值。我在二月份的博客中写过关于它的文章。它有测试类的完整源代码和控制器的大部分源代码。所以可能太长了放不下里面的东西。
http://digitaljoel.nerd-herders.com/2011/02/05/mock-testing-spring-mvc-controller/
sigwle7e3#
我无意中发现了这个线程,而试图建立一些模拟稍微复杂的情况,并认为我会分享我的结果,为后代。
我的情况与此类似,我需要模拟依赖关系,但我也想模拟我正在测试的类上的一些方法。
注意,“dependantService”需要匹配你在控制器上命名的服务示例,如果不匹配,反射将不会找到它并为你注入模拟。
这种方法允许控制器上的所有方法都被默认模拟,然后你可以明确地调用你想使用的真实的的方法,然后使用反射来设置与相应的模拟对象所需的任何依赖关系。
希望这对以后的人有帮助,因为它难住了我一段时间。