【发布时间】:2012-01-27 09:35:18
【问题描述】:
假设我有以下称为 DoSomething 的方法。
在编写单元测试时,我如何知道是使用 Fake、Mock 还是 Override 方法,以及为什么其中一种方法比另一种更好?
public List<MyClass> DoSomething()
{
List<MyClass> data = GetData();
if (data.Count == 0)
return new List<MyClass>();
data = GetFormattedData(data);
if (data.Count == 0)
return new List<MyClass>();
return data;
}
[Test]
public void DoSomething_NoData_ReturnsEmptyList()
{
//Change method parameters to pass in IDataProvider that exposes GetData method
//Create FakeProvider class implementing IDataProvider
//Ensure FakeProvider.GetData returns no data
//Create FakeClass that inherits class from DoSomething class
//Make FakeClass.GetData return no data
//When DoSomething is called in the test it will call the parent class
//Create Mock of class that DoSomething/GetData/GetFormattedData is in
//Tell mock to make sure GetData returns empty list
//Call DoSomething in test
}
[Test]
public void DoSomething_NoFormattedData_ReturnsEmptyList()
{
//Same possibilities exist as above
}
【问题讨论】:
-
GetData()是做什么的?另外,DoSomething是一个方法,而不是一个类。 -
从来没有说过这是一门课。 GetData 转到数据库并返回 List
-
你不应该也测试一下当 GetData() 返回 null 时会发生什么?
标签: c# .net unit-testing mocking tdd