SpringMVC Mockito在类

时间:2016-12-13 14:34:00

标签: spring unit-testing spring-mvc mockito mockmvc

当我从testclass运行class1中的方法try()时,我试图使用mockito来模拟class3中method3()的返回值。我有限制,无法对我所拥有的代码进行任何编辑。所以,我不能添加构造函数来根据我在互联网上看到的一些解决方案来制作模拟。我正在使用MockMVC和WebApplicationContextSetup。请指导我是否可以使用mockito模拟method3()的值,如果不可能,我可以用来模拟值的其他解决方案是什么?

class1
{
     Class2 c2 = new Class2();
     public String try()
     {
        Something temp1 = c2.method1();
     }
}

class2
{
   Class3 c3 = new Class3();
   public String method1()
   {
      return c3.method3();
   }
}
class3
{
  //Will like to mock the return value of this method
  public String method3()
  {
     return "asd";
  }
}
testclass
{
     class1 c1 = new class1();
     c1.try();
}

非常感谢:D

2 个答案:

答案 0 :(得分:0)

关于你的代码,看起来你需要模拟一个静态方法:

return Class3.method3();

或不

public String method3()

请准确,因为根据您是否需要模拟静态方法,答案会有所不同。

答案 1 :(得分:0)

为此你需要窥探你的class2。

import org.junit.Before;
import org.junit.Test;
import org.mockito.*;
import static org.junit.Assert.assertEquals;

public class TestClass {

@InjectMocks
private Class1 class1 = new Class1();

@InjectMocks @Spy
private Class2 class2 = new Class2();

@Mock
private Class3 class3;

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
}

@Test
public void testWithMock() {
    Mockito.when(class3.method3()).thenReturn("mocked");
    assertEquals("mocked", class1.doTry());
}

}