CodeGym/Java Course/Module 3 a ɛto so abien/使用 Mockito 進行高級測試

使用 Mockito 進行高級測試

開放

1.1 Mockito 庫

今天我們將熟悉高級測試。更具體地說,使用Mockito庫。甚至不要考慮離開這個行業。

首先,這個庫是Spring測試中的一個標準。這實際上是 Java 後端開發行業的標準。

其次,您必須為 Spring 代碼編寫測試了解您編寫的後端是否正常工作的唯一方法是調用其 API 的方法。進行測試比不進行測試要容易 10 倍。你會親眼看到的。

您可以使用以下代碼將 Mockito 庫添加到您的庫中pom.xml

<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>4.2.0</version>
    <scope>test</scope>
</dependency>

Mockito 項目的完整源代碼可以在GitHub上找到。

1.2 模擬對象

那麼這個 Mockito 是什麼,為什麼這麼好?

在開發和開發測試的過程中,經常需要將某種“存根”而不是真實對象插入代碼中。

例如,與數據庫一起工作的代碼經過測試並在那裡進行了一些更改。最好在每次測試之前該數據庫的狀態相同(否則測試將不同)。我希望基礎更簡單,以便快速回滾這些狀態。

或者,例如,您正在測試發送有用 SMS 的代碼。對於直郵,他使用某種付費短信網關。最好將一些虛擬網關放入其中以測試代碼,以免向無法理解的人發送數百條 SMS。

或者您的代碼正在從其他 Web 服務器請求數據,而這些數據在測試服務器上根本不可用。或者你寫一個在線支付的代碼,需要測試50次,然後才允許在真正的金融渠道中使用。

我想你明白了……虛擬對象,或者它們也被稱為存根對象,是一個非常有用的東西。

困難來了——Java 有靜態類型。這意味著為了將對ReadDatabase對象的引用分配給變量而不是 類型的對象,您需要從VirtualDatabase繼承類。VirtualDatabaseRealDatabase

然後發現這個類有RealDatabase一堆私有的方法和變量存儲了對其他真實對象的引用,你不能這樣寫一個普通的存根。理論上是好的,但實際上是死胡同。

Java 5 中出現了救援(您可以閱讀DynamicProxy更多詳細信息)。它允許您創建編譯器沒有任何抱怨的虛擬對象。

此類虛擬對象稱為模擬(來自模擬一詞 - 佈局)。Mockito 庫能夠將這些模擬的工作提升到前所未有的高度。因此,順便說一句,圖書館的名字。

1.3 @ExtendWith註解

Mockito 庫與 JUnit 配合得很好,它甚至可以被認為是它的擴展。

有兩種方法可以在單元測試中啟用 Mockito 庫。第一種方式是添加一個特殊的註解:

@ExtendWith(MockitoExtension.class)
public class MockitoAnnotationTest {
    ...
}

第二種方法是通過調用方法啟用它的工作openMocks()

public class MockitoAnnotationTest {
    @BeforeEach
    public void init() {
        MockitoAnnotations.openMocks(this);
   }
}

大多數情況下,您會看到第一個選項,但有時知道還有第二個選項會很有用。

留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言