mockito CollatorProvider mock上不必要的重复

xzlaal3s  于 2023-10-18  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个类LocalizedCollatorProvider

public class LocalizedCollatorProvider {
  private String language = "pl";
  private String country = "PL";

  public Collator getCollator() {
    return Collator.getInstance(new Locale(language, country)):
  }
}

我试着写一个测试这个类,我得到一个错误Unnecessary bridging detected in line

given(collatorProvider.getCollator()).willReturn(getInstance(new Locale("pl", "PL")));

collatorProvider是上述类LocalizedCollatorProvider的模拟

goqiplq2

goqiplq21#

Mockito试图帮助您创建干净的测试。在严格模式下,它应检测测试代码中未使用的存根。
在这种情况下,你嘲笑的东西,但你没有使用。

推荐的解决方案-如果您已经创建了mock,请使用该mock

我将使用Hungarian locale来演示一个简单的comare方法。á元音位于ab之间。

@Test
void assertedTest() {
    var collatorProvider = Mockito.mock(LocalizedCollatorProvider.class);
    given(collatorProvider.getCollator()).willReturn(Collator.getInstance(new Locale("hu", "hu")));
    assertTrue(collatorProvider.getCollator().compare("álom", "barna") < 0);

}

在前面的例子中,我调用了mocked方法并做了一个Assert。所以我不得不做了一个嘲笑。

解决方法-绕过错误

如果您真的想创建一个不必要的mock,那么可以使用lenientstictness绕过它。

@Test
void lenientTest() {
    var collatorProvider = Mockito.mock(LocalizedCollatorProvider.class, withSettings().strictness(Strictness.LENIENT));
    given(collatorProvider.getCollator()).willReturn(Collator.getInstance(new Locale("hu", "hu")));
    // there is neither a method call nor an assertion ->  this stubbing is unnecessary but won't fail
}

相关问题