如何在使用Spring依赖注入时模拟在其他方法中调用的方法?



我有这样的东西:

public class Class1 {
@Autowired
Class2 class2;
public Object class1Method {
// Do something
Object obj = class2.class2Method(arg);
// Do something with obj
return somthing;
}
}

我正在对 Class1 进行单元测试,我想模拟 class2Method。我试图找到解决方案,我找到了这个:

使用Mockito进行新()调用的测试类

我知道如果我在class2Method中执行Class1的新实例,则此解决方案有效,但是就我而言,我使用Spring依赖注入,但我不知道如何做到这一点。

根据你如何使用 spring 构建你的 DI,如果你在现场有@Autowired,你可以使用这样的东西

@RunWith(SpringRunner.class)
public Class1Test {
@InjectMocks
@Autwired
private Class1 class1;
@Mock
Class2 class2;
@BeforeMethod
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
@Test
public Object testClass1Method {
when(class2.class2Method(anyString()).thenReturn(expectedReturn);
//Now test whatever you need with mocked class2.class2Method 
}
}

这要容易得多,如果你有构造函数 DI(构造函数上的@Autowired),则不需要为测试提供 spring 上下文

public Class1Test {
private Class1 class1;
private Class2 class2;
@BeforeMethod
public void initMocks(){
class2 = mock(Class2.class);
class1 = new Class1(class2);
}
//then use the same approach to mock any methods that you need
}

你应该去

莫米托

,并让您的 JUnit 类将其包含在顶部@RunWith(MockitoJUnitRunner.class)。所以在你的情况下,你可以像这样拥有你的Junit。

@RunWith(MockitoJUnitRunner.class)
public Class1Test {
@InjectMocks
private Class1 class1 = new Class1();
@Mock
Class2 class2;
@Test
public Object testClass1Method {
// Now this will get the class2 mock instance when executed
Object obj = class1.class1Method(arg);
}
}

这是使用Mockito编写Class1单元测试的方法:

public Class1Test {
@InjectMocks
private Class1 class1;
@Mock
private Class2 class2;
@BeforeMethod
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
@Test
public void test_method1() {
Object obj = //instantiate it here...,
Mockito.doReturn(obj).when(class2.class2Method(anyString());
Assert.assertEquals(class1.class1Method(), something);
}
}

相关内容

  • 没有找到相关文章

最新更新