c# - 是否需要对接口(interface)的定义进行单元测试?

标签 c# unit-testing mocking interface

我偶尔听说或读到有人在单元测试中断言他们的接口(interface)。我的意思不是模拟一个接口(interface)用于另一种类型的测试,而是专门创建一个测试来伴随该接口(interface)。

考虑这个极端蹩脚和即兴的例子:

public interface IDoSomething
{
   string DoSomething();
}

和测试:

[TestFixture]
public class IDoSomethingTests
{
   [Test]
   public void DoSomething_Should_Return_Value()
   {
        var mock = new Mock<IDoSomething>();
        var actualValue = mock.Expect(m => m.DoSomething()).Returns("value");

        mock.Object.DoSomething();
        mock.Verify(m => DoSomething());
        Assert.AreEqual("value", actualValue);
   }
}

我想这个想法是使用测试来驱动界面的设计,并为实现者提供预期的指导,以便他们可以自己绘制好的测试。

这是一种常见(推荐)的做法吗?

最佳答案

在我看来,仅使用模拟框架测试接口(interface)只会测试模拟框架本身。就个人而言,我不会花时间在上面。

我会说应该驱动界面设计的是需要什么样的功能。我认为仅使用模拟框架很难确定这一点。通过创建接口(interface)的具体实现,需要什么或不需要什么将变得更加明显。

我倾向于这样做的方式(我绝不声称这是推荐的方式,只是我的方式),是在具体类型上编写单元测试,并引入接口(interface)在哪里需要用于依赖注入(inject)目的。

例如,如果被测具体类型需要访问某个数据层,我将为这个数据层创建一个接口(interface),为该接口(interface)创建一个模拟实现(或使用模拟框架),注入(inject)模拟实现并运行测试。在这种情况下,接口(interface)除了为数据层提供抽象之外没有任何作用。

关于c# - 是否需要对接口(interface)的定义进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458661/

相关文章:

c# - 针对 .NET Framework 3.5 编译的项目允许 C# 4.0 功能

c# - 声明基类出错的类

C# 2D Array - 如何打印每行中最大的元素

c# - 顺序验证

java - 当我们使用 Spring Autowiring DAO 时,如何在我的单元测试中模拟出各种结果集?

python - 模拟 python 内置日期时间不能作为装饰器工作

c# - 在运行时从 Blazor 应用程序中动态加载的程序集呈现页面

c# - 在没有 Visual Studio 的情况下使用 Microsoft.VisualStudio.TestTools.UnitTesting?

go - 模拟一个在 Golang Http 处理程序中调用的函数

testing - 如何在 flask-restful 资源方法中模拟函数调用