c# - 集成测试是否应该重做使用模拟的单元测试?

标签 c# unit-testing tdd

在编写单元测试时,我一次只检查一个类。如果我需要使用额外的类,那么我将使用模拟来确保测试是独立的。

以后想写集成测试,是不是只复制/粘贴所有使用mocking的单元测试,去掉mock对象后再测试?

示例代码:

public class Event
{
    string title;
    List<Hour> hoursList = new List<Hour>();
    public Event(string title) { this.title = title; }
    public void AddHour(Hour newHour) { hoursList.Add(newHour); }
    public int HourCount() { return hoursList.Count; }
    public int TotalDuration() {
        int total = 0;
        foreach (var hour in hoursList)
        total += hour.GetDuration();
        return total;
    }
}
public class Hour
{
    string start;
    string end;
    public Hour(string start, string end) { this.start = start; this.end = end; }
    public virtual int GetDuration() { /* algorightm calculating duration in minutes */  }
}

示例测试:

int expected = 165;
Event Concert = new Event("Local band concert");
Mock<Hour> ehMock = new Mock<Hour>("07:00", "08:30");
ehMock.Setup(x => x.GetDuration()).Returns(90);
Mock<Hour> ehMock2 = new Mock<Hour>("19:15", "20:30");
ehMock2.Setup(x => x.GetDuration()).Returns(75);
Concert.AddHour(ehMock.Object);
Concert.AddHour(ehMock2.Object);
Assert.AreEqual(expected, Concert.TotalDuration());

在上面的单元测试中,我正在测试 Event 类中的 TotalDuration 方法,Hour 类是模拟的,我重写了 GetDuration() 方法。现在我应该使用相同的测试进行集成测试,但不使用 Mock 吗?

也许上面的例子太简单了,不需要集成测试。如果我有更高级的单元测试,那么推荐相同功能的集成测试?

最佳答案

一个更抽象的答案:这两件事的范围完全不同。

存在单元测试以测试您的各个单元的所有方面。所有单位,其所有功能。待隔离检测。换句话说:您构建了一大堆乐高积木,并且您的单元测试告诉您所有这些构建 block 完全按照它们应该做的去做。

另一方面:集成测试归结为确保正确的集成。意思是:你想出你最重要的“路径”,你想走,你写集成/功能测试来敲定这些。

整点testing pyramid是你保留你的单元测试,这样你就可以编写更少数量的集成测试。因为单元测试运行速度很快,可以帮助您快速识别和修复错误。集成测试更重要,但也 更昂贵*,并且您将它们用于无法正确进行单元测试的事情。

因此:集成测试当然会“测试”您的单元测试已经验证的内容。但是您想简单地将所有单元测试转换为集成测试。

关于c# - 集成测试是否应该重做使用模拟的单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51733746/

相关文章:

unit-testing - 与实时站点一起针对 Recurly API 运行测试

c# - 从另一个方法内部调用的方法的单元测试返回值

c# - 如何在svn中只忽略一行?

c# - 垃圾收集器是否调用 Dispose()?

c# - 如何将计时器信息从主场景传递到另一个(再试一次)场景?统一C#

unit-testing - 关于如何编写对重构友好的单元 TDD 测试的技巧

javascript - qunit - 测试异常消息?

c# - 从另一个表单刷新 dataGridView 的数据源

java - 对插件进行单元测试 : cannot find symbol errors?

node.js - 在 Mocha 上测试管理员用户