我在测试用例中使用Junit4和Mockito,在下面的代码dbprop.getProperty("config")
中抛出NullPointerException
,因为dbProp为null。请帮帮我解释为什么没有嘲笑?
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"));
}
}
答案 0 :(得分:2)
您的dbprop
模拟尚未注入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
注释时注入模拟,您需要添加以下运行符:
@RunWith(MockitoJUnitRunner.class)
public class TestSampleClass {
...
或者使用@Before
方法调用以下内容:
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
有关这两种方法的更多信息,请参阅MockitoAnnotations和MockitoJUnitRunner JavaDocs。
答案 1 :(得分:0)
您可以使用@Mock注释您的对象,因此它看起来像这样
@Mock DBproperties dbProperties; @Before public void init(){MockitoAnnotations.initMocks(this); }