2 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊
在您的setUp()
方法中,您正在使用 Mockito 來(lái)模擬帶有注釋的 bean,@Mock
并將它們注入到 的新實(shí)例中ReceiptController
,然后將其放入帶有注釋的字段中@InjectMocks
。
ReceiptController
在下一行中,您將使用(您使用的)的新實(shí)例設(shè)置 MockMvc?new ReceiptController()
,而不是使用 Mockito 創(chuàng)建的實(shí)例。這意味著該實(shí)例中的所有字段都將是null
.
這幾乎可以歸結(jié)為Why is my Spring?@Autowired
fieldnull
。
要解決這個(gè)問題,您可以傳遞receiptController
給 MockMvc。在這種情況下,您還可以刪除@WebMvcTest
和@RestClientTest
因?yàn)槟皇褂盟鼈儭?/p>
或者,您可以使用 設(shè)置測(cè)試,并通過(guò)使用in stead of和in stead of@RunWith(SpringRunner.class)
正確設(shè)置 Spring 測(cè)試。在這種情況下,您根本不需要方法,因?yàn)?MockMvc 可以由 Spring 自動(dòng)裝配。@Autowired
@InjectMocks
@MockBean
@Mock
setUp()

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
允許您進(jìn)行集成測(cè)試,而不是單元測(cè)試。
它們?cè)试S您啟動(dòng)實(shí)際的 Spring 應(yīng)用程序(使用隨機(jī)端口)并測(cè)試實(shí)際的控制器類及其依賴項(xiàng)。這意味著您在測(cè)試頂部聲明的變量實(shí)際上并未在當(dāng)前設(shè)置中使用。
如果你想對(duì)你的控制器進(jìn)行單元測(cè)試,你可以刪除@WebMvcTest,創(chuàng)建模擬依賴項(xiàng)(就像你所做的那樣)并直接調(diào)用你的方法而不是使用 MockMvc。
如果你真的想寫一個(gè)集成測(cè)試,你需要模擬你的外部依賴(例如數(shù)據(jù)庫(kù))。你可以配置spring在測(cè)試環(huán)境中使用嵌入式數(shù)據(jù)庫(kù)(例如H2),這樣就不會(huì)影響你的真實(shí)數(shù)據(jù)庫(kù)。
添加回答
舉報(bào)