提问人:Sarah Vessels 提问时间:5/28/2010 最后编辑:FinglasSarah Vessels 更新时间:5/28/2010 访问量:321
使用指令组织,重新运行测试?
organize using directives, re-run tests?
问:
在提交之前,我更喜欢在我的 C# 解决方案中运行所有一百多个单元测试,因为它们只需要几分钟即可运行。但是,如果我已经运行了它们,一切都很好,然后我决定在我的解决方案中组织指令,那么真的有必要重新运行单元测试吗?我有一个宏,它遍历解决方案中的所有文件,并在每个文件上运行 Visual Studio 的“删除和排序”命令。在我的理解中,只要所有项目在指令更改后仍然构建,运行时也应该没问题。这是正确的想法吗?using
using
答:
0赞
Stephen Cleary
5/28/2010
#1
是的。无需重新运行单元测试。指令的顺序对编译器来说并不重要。using
评论
0赞
Sarah Vessels
5/28/2010
好吧,Visual Studio 中的该命令既对指令进行重新排序,又删除它认为不必要的指令。using
0赞
Stephen Cleary
5/28/2010
@Sarah:没错。但我从未见过它犯错并删除我正在使用的那个。这是它破裂的唯一方法。
1赞
Finglas
5/28/2010
#2
没关系。
不过就我个人而言,我仍然会在提交任何代码之前运行测试。
评论
0赞
Sarah Vessels
5/28/2010
看,伙计,这就是为什么我要问:我同样偏执!如果它建成,你为什么要重新运行?
1赞
Finglas
5/28/2010
使用自动化构建过程 - 如果您要使用自动化构建,则任何更改(重新排序使用也不例外)都将导致启动新构建。就个人而言,这是一件好事。至少你不会被贴上破坏构建的标签。此外,单元测试的好处之一是让您充满信心,从而在提交代码时避免偏执。如果重新运行单元测试消除了这种偏执狂,那就去做吧——有什么害处?;)
0赞
Josh Sterling
5/28/2010
我会重新运行测试,因为一旦你开始制造异常,让重大更改通过“哦,这是一个超级简单的更改”要容易得多。始终测试然后提交,使存储库保持工作状态值得进行一些额外的单元测试。
2赞
Jon Skeet
5/28/2010
#3
嗯,这在一定程度上取决于你对“删除和排序”功能的信任程度。据我所知,排序无关紧要 - 但存在哪些指令可能很重要。
例如,假设您有以下扩展方法:
public static int Count<T>(this List<T> source)
{
return 0;
}
如果这是命名空间中的某个类型,并且原始代码是这样的:MyExtensions
using MyExtensions;
using System.Linq;
...
List<string> list = new List<string>();
int x = list.Count();
然后删除第一个 using 指令不会对可见的编译器输出产生任何影响(即没有错误,没有警告),但它会改变调用的扩展方法。
现在我个人相信“删除和排序”实际上不会做出如此改变行为的改变,而且你必须有一些非常脆弱的代码才能开始......但我只是想提一下,“它之后仍然会构建”实际上并不足以保证您的测试仍然有效。
就我个人而言,无论如何我可能会再次运行测试,但同样,如果有必要,我很乐意不这样做。正如 Finglas 所提到的,如果你有一个持续的构建系统,无论如何都会提醒你发生重大变化,那么偶尔出错的后果可能不会太灾难性。当然,如果你有成千上万的开发人员会因为被损坏的代码而感到不便,那就另当别论了。
评论