hta*_*oya 20 android unit-testing mockito android-junit
据我了解,沉默StrictStubbinglenient
引发的异常。基于此,不应该使用,也许只是在执行 TDD 时暂时使用,因为严格的存根异常通常意味着您的代码要么是错误的,测试设计得很糟糕,要么您添加了不必要的行。lenient
lenient
是否存在实际需要或对测试有用的实际场景?
小智 15
何时使用的一个很好的例子lenient
是@BeforeEach
块中。
如果您在几乎所有测试用例中都使用存根,那么在每个测试用例之前创建存根是有意义的。如果您有任何不使用存根的测试,则需要使用它lenient
来防止严格存根引发错误。这是mockito文档中使用的示例:
Run Code Online (Sandbox Code Playgroud)@Before public void before() { when(foo.foo()).thenReturn("ok"); // it is better to configure the stubbing to be lenient: // lenient().when(foo.foo()).thenReturn("ok"); // or the entire mock to be lenient: // foo = mock(Foo.class, withSettings().lenient()); } @Test public void test1() { foo.foo(); } @Test public void test2() { foo.foo(); } @Test public void test3() { bar.bar(); }
ams*_*ger 10
例如,如果您需要在短时间内完成从 Mockito 1 迁移到 Mockito 2(后者引入了严格存根),那么它非常有用。
小智 7
引入严格存根是为了检测不必要的存根并编写更干净的测试。如果遇到异常,重点应该放在改进测试用例上,而不是绕过严格的存根检查。
我刚刚遇到了一个不寻常的有效用途。我们对代码进行了更改,默认禁用了某个功能(在将来的版本中将其完全删除之前)。我们需要测试禁用是否确实有效,因此我们需要将某些标志模拟为 false。然而,我们还需要模拟一些其他值,因为如果禁用该功能的代码(测试该标志)以某种方式被破坏,该功能的默认设置将导致它什么都不做,所以我们不会'无法观察到标志的故障。
总结一下:在成功的情况下,我们会通过模拟得到 UnnecessaryStubbingException,但是如果没有它,失败的情况实际上不会失败。因此,我们将这些特定的嘲笑标记为宽松。
如果您正在编写参数化测试,则 lenient() 也很有用。参数化测试比严格存根更能减少冗余代码。因此,如果您使用参数化测试(例如,测试所有异常条件),如果某些调用需要存根而其他调用不需要,您可能需要 lenient() 存根。首先,让你的存根尽可能具体。
归档时间: |
|
查看次数: |
77568 次 |
最近记录: |