【发布时间】:2009-04-07 18:56:44
【问题描述】:
我正在尝试掌握测试驱动开发,我想知道这些单元测试是否合适。我有一个如下所示的界面:
public interface IEntryRepository
{
IEnumerable<Entry> FetchAll();
Entry Fetch(int id);
void Add(Entry entry);
void Delete(Entry entry);
}
然后是实现该接口的这个类:
public class EntryRepository : IEntryRepository
{
public List<Entry> Entries {get; set; }
public EntryRepository()
{
Entries = new List<Entry>();
}
public IEnumerable<Entry> FetchAll()
{
throw new NotImplementedException();
}
public Entry Fetch(int id)
{
return Entries.SingleOrDefault(e => e.ID == id);
}
public void Add(Entry entry)
{
Entries.Add(entry);
}
public void Delete(Entry entry)
{
Entries.Remove(entry);
}
}
这些是我到目前为止编写的单元测试,它们还不错还是我应该做一些不同的事情?我应该嘲笑 EntryRepository 吗?
[TestClass]
public class EntryRepositoryTests
{
private EntryRepository rep;
public EntryRepositoryTests()
{
rep = new EntryRepository();
}
[TestMethod]
public void TestAddEntry()
{
Entry e = new Entry { ID = 1, Date = DateTime.Now, Task = "Testing" };
rep.Add(e);
Assert.AreEqual(1, rep.Entries.Count, "Add entry failed");
}
[TestMethod]
public void TestRemoveEntry()
{
Entry e = new Entry { ID = 1, Date = DateTime.Now, Task = "Testing" };
rep.Add(e);
rep.Delete(e);
Assert.AreEqual(null, rep.Entries.SingleOrDefault(i => i.ID == 1), "Delete entry failed");
}
[TestMethod]
public void TestFetchEntry()
{
Entry e = new Entry { ID = 2, Date = DateTime.Now, Task = "Testing" };
rep.Add(e);
Assert.AreEqual(2, rep.Fetch(2).ID, "Fetch entry failed");
}
}
谢谢!
【问题讨论】:
-
出于好奇,您使用的是什么测试框架?我也在尝试启动 TDD 并正在寻找建议。
-
我在 Visual Studio 2008 中使用内置的 tdd 功能
-
您可能想为您的问题想一个新标题,“这些单元测试好吗?”相当通用。
-
啊。哦,好吧 :-)(我使用的是 Express Edition)
-
@person-b:NUnit 是一个流行/免费的 C# 测试框架。
标签: c# .net unit-testing tdd mocking