根据官方网站,NSubstitute是.NET模拟库的友好替代品。我对此进行了搜索/阅读,并找到了一篇供参考的好文章& 这是吗?这里有几行离它不远的地方
Stub
因为这段代码只知道抽象(即。(接口),在不使用这些接口的生产实现的情况下,很容易运行这段代码。我只需为实现这些接口的测试创建另一个实现,但不调用数据库。这些测试实现被称为“存根”。
& Mock
模拟库允许您模拟接口或抽象类型的实现。您将实例化接口的一个“模拟”对象,并告诉该模拟对象,如果对该模拟调用了一个方法/属性,那么它应该返回什么。还可以断言方法/属性被调用或未调用。
因此,如果我们想更好地关联/理解它,比如在模拟/存根库方面,它是什么?是一个模拟/ stub /两者都有简单的处理方法吗?
发布于 2021-05-16 01:35:32
我认为这方面的确切来源是杰拉德·梅萨罗斯( Gerard )的xUnit测试模式书。Martin对梅萨罗斯的双打测试类型有一个很好的总结。从这些定义中,存根是返回特定结果的测试加倍,而模拟则是在测试运行前应该接收的调用上设置的特定期望。
NSubstitute是为安排-动作-断言(AAA)测试而设计的,据我所知,这种测试是由奇妙的Moq库首次推广的。这些术语在AAA之前就已经出现了,所以我不认为它们完全适合这些类型的库。随着时间的推移,术语变得模糊了,所以任何测试都会被称为“模拟”,即使我们没有设定明确的期望。
如果我们对定义有点松懈,那么在NSubstitute上下文中,我们可以使用“顽固性”来引用我们使用Returns设置的响应,以及“模拟”,就像我们断言使用Received接收了预期的调用一样。这可以在同一个测试双对象上完成。也就是说,我们不创建模拟或存根,我们创建一个测试双(或“替代”),可以做到这两者。NSubstitute故意模糊了这些线条。来自网站
假的,假的,间谍的,测试双倍的?严格还是宽松?不,用你需要的那种代替吧! NSubstitute是为安排-动作-断言(AAA)测试而设计的,所以您只需要安排它应该如何工作,然后断言它收到了您期望的呼叫。因为您需要编写比需要模拟或存根更重要的代码。
在回答您的问题时,如果我们严格执行定义,NSubstitute是一个用于创建测试双变量的库,它支持存根和模拟的替代(AAA而不是调用期望)。在实践中,每个人都倾向于不理解这些定义,只需将测试称为“模拟”。
https://stackoverflow.com/questions/67547451
复制相似问题