我正在SpringMVC上使用Mockito进行JUnit测试。测试使用@InjectMock和@Mock with when(方法(…)。然后返回(X)。问题是如何在@Inject实例中@Mock方法?
我尝试过创建两个实例,例如@InjectMocks Foo foInstance和@Mock Foo foInstanceMock;我的思维方式是区分注入什么实例和嘲笑什么实例。我也尝试使用间谍与InjectMocks,但它返回一个异常。
实际类语法-
class Foo {
public X(..) {
...
Y(...); // method call to Y
...
}
public Y(..) {
...
}
}
测试语法-
public class FooTest {
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@InjectMocks
Foo fooInstance;
@Mock
Foo fooInstanceMock;
@Test
public void xTest{
when(fooInstanceMock.Y(..)).thenReturn(true);
Boolean result = fooInstance.X(25);
Assert.assertTrue(result == true)
}
}
我希望输出为true,然后返回true,但因为它认为这是一个injectMock,所以它进入了实现。
@InjectMocks
用于将您在测试中定义的mock注入具有此注释的非mock实例。
在您的用例中,看起来您正在尝试做一些不同的事情-您想要一个真正的Foo
,真正实现x
,但要模仿y
的实现,它调用x
。这可以通过部分模拟或用Mockito的术语来说,间谍来实现:
public class FooTest{
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
// Default constructor is used to create a real Foo instance.
// In the test's body, though, we'll override the behavior of SOME of the methods
@Spy
Foo fooInstance;
@Test
public void xTest {
doReturn(true).when(fooInstance).y(/* arguments, presumably 25 */);
Boolean result = fooInstance.x(25);
Assert.assertTrue(result);
}
}
例如,我有处理程序: 但是当我试图模拟它时,它实际上调用。如何使用来模拟它的方法?
我遇到一个关于注入的mock注释类中的mock私有方法的问题。我的代码如下 当我用power mockito创建一个UT类时,foo类应该是@injectMocks,因为foBean应该作为模拟类注入。但是当foo类被标记为@injectMocks时,它不能像“do返回”(“xxx”)那样模仿它的私有方法。当(foo,“方法2”)时,它会引起关于这不能应用于injectMocks的错误。 它被封锁
下面是抽象类的代码: 现在,我应该如何为编写单元测试,并且应该如何在中模拟会话? 我在Stackoverflow上尝试了不同的解决方案,但仍然无法模拟它并获得会话模拟。
我在我的类中有一个方法,如下所示,我试图测试它: 在上面,是一个方法,它将文件名作为参数。它从AWS S3中获取该文件的inputstream。在测试Spock的方法时,我希望为方法提供一个模拟,因为我不想使用类中的这个方法的实现,因为它转到了另一个bucket名称。
我尝试模拟父类的受保护方法。因此,我使用&。我的家长班。
所以我有一个类需要测试。我们把它叫做ClassToTest。它有两个Dao对象作为字段。 正如您所看到的,ClassToTest不包含任何构造函数或setter,我正在使用spring自动关联字段。 现在,我有了一个具有classToTest所需的所有依赖项的基本测试类: 并且testClass扩展了这个BaseTest类: 这将导致保存时出现空指针异常。但是,如果我将设置方法更改为: 考试通过了