【发布时间】:2018-08-07 19:03:23
【问题描述】:
在编写单元测试时,我一次只检查一个类。如果我需要使用额外的类,那么我将使用模拟来确保测试是独立的。
稍后我想编写集成测试,是否应该只复制/粘贴所有使用模拟的单元测试并在删除模拟对象后对其进行测试?
示例代码:
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 吗?
也许上面的例子太简单了,不需要集成测试。如果我有更高级的单元测试,那么推荐相同功能的集成测试?
【问题讨论】:
-
这个问题的答案将是相当基于意见的,因此它们不适合 Stack Overflow。我建议将此问题提交给Software Engineering 或Software QA and Testing Stack Exchanges。
-
@Abion47 感谢您的评论,我会检查提到的堆栈。
-
感谢您的快速回归!
标签: c# unit-testing tdd