到目前为止,我一直在使用MSTest进行单元测试,发现它有时会无缘无故地随意破坏我的构建。构建在VS中会失败,但在MSBuild中编译正常 - 错误如'option strict不允许IFoo强制转换为IFoo类型'。我相信我终于解决了它,但是在虫子回来后努力让它再次消失,而MS的帮助很少,它在我嘴里留下了不好的味道。我也注意到在看这个论坛和其他博客等时,大多数人都在使用NUnit,xUnit或MBUnit ..我们在VS2008上工作BTW ..所以现在我正在寻找其他选择..
我正在努力让我们的团队开始进行TDD和真正的单元测试,并计划进行一些培训,但首先想要提出一套标准工具&最佳做法。为此,我一直在网上寻找构建服务器和开发机器的正确基础架构...我正在查看typemock网站,因为我听说过他们的模拟框架很棒的东西,并注意到它们似乎促进了MSTest,甚至还有一些人们移动的链接TO MSTest from NUnit ..
这让我重新思考我的决定..所以我想我问 - 是否有人使用MSTest作为其TDD基础设施的一部分?它有任何已知的限制,如果我想与构建/ CI服务器集成,或代码覆盖或我可能需要的任何其他类型的TDD工具?我确实在搜索这些论坛,并且大多数人发现人们将第三方框架与彼此进行比较,甚至没有给MSTest太多机会......有充分理由说明原因......?
感谢您的建议
编辑:感谢这个帖子中的回复,我已经确认MSTest适用于我的目的,并且优雅地与CI工具和构建服务器集成。但有没有人有任何使用FinalBuilder的经验?这是我希望我们用于构建脚本的工具,以防止与其他构建工具相比编写大量XML。在进行MS测试之前,我应该注意哪些限制?
我还应该注意 - 我们正在使用VSS =(。我希望我们能尽快解决这个问题 - 希望这是建立所有这些基础设施的一部分,甚至可能是第一步。
答案 0 :(得分:2)
在Safewhere,我们目前使用MSTest进行TDD,它运行正常。
就个人而言,我喜欢 IDE集成,但不喜欢API。如果有可能将xUnit.NET与VS测试运行器集成,我们很快就会迁移。
至少在TFS中,MSTest作为CI的一部分非常有效。
总而言之,我发现MSTest适合我,但我并不坚持。
如果您正在评估模拟库,请查看this comparison。
答案 1 :(得分:1)
自从VS 2008问世以来,我一直在使用MS Test,但是我还没有在这里工作过强大的TDD或CI,尽管我试图建立一些与Cruise Control混淆的东西。我本地方框上的CI服务器。
总的来说,我发现MS Test对于本地测试非常不错,但是在机构使用方面存在一些痛点。
首先,MS Test添加了很多可能不属于源代码控制的东西。 .VSMDI文件特别烦人;只需运行MS Test就可以创建1到5个,并将它们添加到解决方案文件中。这意味着你的.SLN在源代码控制中流失,而那种流失很糟糕。
我理解这些额外文件背后的假设点 - 跟踪测试运行历史等等 - 但我发现它们对于除了单个开发人员之外的任何东西都没有特别有用。你应该使用你的构建服务和CI来做这类事情!
其次,您必须让Team Foundation Server作为CI的一部分运行您的单元测试,或者如果您使用,则必须在构建服务器上安装Visual Studio的副本,例如,Cruise Control.NET。有关详细信息,请参阅this Stack Overflow question。
一般来说,MS Test没有任何问题。但是,CI将不会像现在这样顺利。
答案 2 :(得分:1)
我在我们公司非常成功地使用MSTest。我们目前正在公司内部建立标准化的构建流程,到目前为止,我们已经在TeamCity取得了很好的成功。对于持续集成,我们使用了TeamCity配置框。对于实际的发布版本,我们设置了大型的msbuild脚本,可以自动完成整个过程。
我非常喜欢mstest,因为IDE集成以及我们所有开发人员都可以自动使用它而无需安装任何第三方依赖项。我不建议只是因为您遇到的问题而进行切换。我已经走了一圈,我们去了nunit然后又回来了。这些框架在一天结束时都是一样的,所以选择最适合您的大多数开发人员访问并开始使用的框架。
我怀疑你的问题可能是......听起来像我之前在dll的错误引用之前所遇到的一个模糊的问题(例如:在解决方案中向项目添加显式引用(通过浏览),而不是使用项目引用)导致过时的问题只会在清理结账或构建之后出现。
我之前发现的另一个真正可疑的问题是,如果您有一些可视组件或控件具有某些自定义类型的公共属性,该属性在表单.resx文件中被序列化。我通常需要使用一个名为SerializationVisibility.Hidden的属性来标记它们。这意味着IDE不会尝试为属性值生成setter(通常是一些对象图)。只是一个想法。可能是出路。
我相信这些工具,他们并不是真正的问题所在。他们只是歪曲他们或将他们报告为完全模糊不清的东西。听起来像你有这个。我怀疑这是因为错误消息没有意义,如果所有都是有序的,但是如果某段代码在那时加载了过时的dll或修改版本,那么它确实有意义。
答案 3 :(得分:0)
我已经成功部署了几个FinalBuilder安装,客户对结果非常满意。我强烈推荐它。