簡體   English   中英

Mockito,如果我不關閉 Mocked 靜態方法會發生什么

[英]Mockito, what happens if I do not close my Mocked static method

void givenStaticMethodWithNoArgs_whenMocked_thenReturnsMockSuccessfully() {
    MockedStatic<StaticUtils> utilities = Mockito.mockStatic(StaticUtils.class)
    utilities.when(StaticUtils::name).thenReturn("Eugen");
    assertThat(StaticUtils.name()).isEqualTo("Eugen");
    utilities.close();
}

為什么我什至需要關閉它?

正如javadoc所說:

如果此對象從未關閉,則靜態模擬將在啟動線程上保持活動狀態

由於該類實際上實現了AutoClosable接口,您可以簡單地在try-with-resources使用該類 - 這是javadoc 中的推薦:

 assertEquals("foo", Foo.method());
 try (MockedStatic mocked = mockStatic(Foo.class)) {
 mocked.when(Foo::method).thenReturn("bar");
 assertEquals("bar", Foo.method());
 mocked.verify(Foo::method);
 }
 assertEquals("foo", Foo.method());
 

如果您希望 Mock 在所有測試期間都處於活動狀態,您可以永遠不要關閉 Mock。 但是,如果您這樣做,我會在 init 方法中而不是在測試中進行。 但是,如果您的測試應該是獨立的並且不顯示此類行為,則需要關閉它。

就我而言,當我沒有在 try-with-resource 中包含 try 時,我隨后的 TC/Junits 開始失敗,不知道是什么原因。

暫無
暫無

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

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