gpt4 book ai didi

java - 使用 junit 和 mockito 执行测试用例时, Autowiring 依赖项不会被模拟

转载 作者:行者123 更新时间:2023-12-02 06:57:40 27 4
gpt4 key购买 nike

我使用 Junit4 和 Mockito 进行测试用例,在下面的代码中 dbprop.getProperty("config") 抛出 NullPointerException 因为 dbProp 为 null。请帮我看看为什么它没有被 mock ?

public abstract class BaseClass {
@Autowired
protected DBproperties dbprop;
}

public class SampleClass extends BaseClass {
@Autowired
private OrderService orderService;

valdiateOrder(String input) {
String config = dbprop.getProperty("config");
}
}

public class TestSampleClass {
@InjectMocks
SampleClass sampleClass;

@Mock
private OrderService orderService;

@Test
public void testValidateOrder() {
DBproperties dbprop = mock(DBproperties .class);
when(dbprop.getProperty("config")).thenReturn("xxxx");
assertNotNull(SampleClass.valdiateOrder("xxx"));
}
}

最佳答案

您的dbprop模拟尚未注入(inject) sampleClass ,您需要添加:

@Mock
private DBproperties dbprop;

然后删除 dbprop从您的测试方法创建模拟:

@Test
public void testValidateOrder() {
// DBproperties dbprop = mock(DBproperties .class); <-- removed
when(dbprop.getProperty("config")).thenReturn("xxxx");
assertNotNull(SampleClass.valdiateOrder("xxx"));
}

接下来,确保使用 @InjectMocks 时注入(inject)模拟您需要添加以下运行程序的注释:

@RunWith(MockitoJUnitRunner.class)
public class TestSampleClass {
...

或者在@Before中调用以下内容方法:

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

请参阅MockitoAnnotationsMockitoJUnitRunner JavaDocs 以获取有关这两种方法的更多信息。

关于java - 使用 junit 和 mockito 执行测试用例时, Autowiring 依赖项不会被模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105217/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com