簡體   English   中英

使用junit和mockito執行測試用例時,自動連接的依賴項不會被模擬

[英]autowired dependency not getting mocked while executing test case with junit and mockito

我在測試用例中使用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"));
    }
}  

您的dbprop mock尚未注入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注釋時注入@InjectMocks您需要添加以下運行器:

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

或者在@Before方法中調用以下內容:

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

有關這兩種方法的更多信息,請參閱MockitoAnnotationsMockitoJUnitRunner JavaDocs。

你可以用@Mock注釋你的對象,所以它看起來像這樣

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM