gpt4 book ai didi

c# - 我应该为以下示例使用模拟吗

转载 作者:太空狗 更新时间:2023-10-29 22:11:22 24 4
gpt4 key购买 nike

我对使用 TDD 比较陌生,最近一直在阅读有关模拟对象的内容。我有以下测试来测试给定日期返回下周六的方法。

[TestMethod()]
public void NextSaturdayTest()
{
DateTime date = new DateTime();
date = DateTime.Parse("2010-08-14");
DateTime expected = new DateTime();
expected = DateTime.Parse("2010-08-21");
DateTime actual;
actual = DateExtensions.NextSaturday(date);
Assert.AreEqual(expected, actual);

date = DateTime.Parse("2010-08-19");
expected = DateTime.Parse("2010-08-21");
actual = DateExtensions.NextSaturday(date);
Assert.AreEqual(expected, actual);
}

首先,这是否代表良好的测试实践?其次,使用模拟框架创建此测试有什么优势?

如果我可以提供更多信息,请告诉我。

感谢您的任何想法

最佳答案

首先,不要这样做:

DateTime date = new DateTime();
date = DateTime.Parse("2010-08-14");

您正在创建一个新的日期时间,然后在解析字符串以获取新的日期时间时将其丢弃。请记住,测试代码仍然应该是好的代码。

其次,好的测试测试一件事。您可能有多个测试,例如 ReturnsCorrectNextSaturdayGivenAWednesdayReturnsCorrectNextSaturdayWhenCrossesEndOfMonthReturnsCorrectNextSaturdayWhenCrossesEndOfYear

最后,没有理由在这里 mock 。如果您的 DateExtensions 调用另一个组件(例如数据库)并且您想伪造该调用,则模拟将是合适的。因此,您无需测试 DateExtensions + 数据访问,而只需测试 DateExtensions,当它调用数据访问层时,它将是您的测试设置的模拟。

关于c# - 我应该为以下示例使用模拟吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718087/

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