gpt4 book ai didi

c# - 那些单元测试没问题吗?

转载 作者:太空狗 更新时间:2023-10-30 00:17:39 25 4
gpt4 key购买 nike

我正在尝试掌握测试驱动开发,我想知道那些单元测试是否合适。我有一个看起来像这样的界面:

public interface IEntryRepository
{
IEnumerable<Entry> FetchAll();
Entry Fetch(int id);
void Add(Entry entry);
void Delete(Entry entry);
}

然后是实现该接口(interface)的类:

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);
}
}

这些是我到目前为止编写的单元测试,它们还好吗?还是我应该做些不同的事情?我应该 mock 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");
}
}

谢谢!

最佳答案

就在我的脑海里……

尽管您对 add 的测试实际上只测试了框架:

  • 您已经添加了 1 项,很好
  • 如何添加大量项目(我的意思是,数量可笑——容器添加失败的 n 个条目的值是多少?)
  • 如果不添加项目呢? (空条目)
  • 如果您将项目添加到列表中,它们是否按特定顺序排列?应该是吗?

与你的抓取一样:

  • 如果 x > rep.Count,你的 fetch(x) 会发生什么?
  • 如果 x < 0 会怎样?
  • 如果代表为空会怎样?
  • x 是否符合性能要求(它的算法是什么?复杂?当只有一个条目时它是否在范围内以及何时条目数量多得离谱?

书中有一个很好的 list Pragmatic Unit Testing (好书,强烈推荐)

  • 结果是否正确?
  • 所有的边界条件都正确吗
    • 符合预期的格式
    • 正确订购
    • 在合理范围内
    • 它是否引用任何外部依赖项
    • 基数是否正确? (正确的值数量)
    • 它是否在正确的时间内完成(真实的或相对的)
  • 你能检查反向关系吗
  • 你能用另一种行之有效的方法交叉检查结果吗
  • 你能强制错误条件吗
  • 性能特征是否在范围内

关于c# - 那些单元测试没问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/727142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com