0

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

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"));
    }
}  
4

2 回答 2

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);
}

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

于 2013-06-14T10:18:25.683 回答
0

您可以使用@Mock 注释您的对象,所以它看起来像这样

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

于 2015-10-21T11:08:17.427 回答