C#测试项目和C#类库项目的区别

10

为什么要使用C#测试项目而不是C#类库项目来保存我的单元测试?

谢谢。


在 MSTest 项目中使用了一种特殊的项目类型 GUID。这可能是为了让单元测试更快地被发现(只需要扫描实际的测试项目)。 - oɔɯǝɹ
2个回答

7
测试项目默认会自动添加所有的MSTest引用,同时还为您创建了一些默认示例,例如一个简单的测试示例。
对于类库项目,您也可以从中构建测试项目,但需要手动添加MSTest引用。这并不是一个大问题,但测试项目可以节省您的时间和麻烦。
编辑:
正如评论中所指出的那样,两种项目类型之间的重要区别在于,使用类库项目,您可以选择任何单元测试框架。

1
为了澄清,测试项目就是一个,只是添加了一些额外的东西。 - STW
一个测试项目将具有特殊的项目类型GUID,并且如果没有它将无法识别。 - oɔɯǝɹ
这就是全部了吗?我还注意到一些测试列表文件出现在解决方案中。 - George Mamaladze
2
需要注意的是,MSTest并不是唯一可用的测试框架。xUnit.net就是一个例子,而这个扩展程序则提供了与Visual Studio 2012/2013的集成。 - user247702
据我所知,根据是否使用MST,测试在TFS构建基础设施中的集成方式存在一些差异。 - George Mamaladze
刚刚查看了两种项目类型的项目文件。在 MS Test 项目中,项目类型 GUID 似乎是最重要的区别。谢谢。 - farooq ijaz

0

我没有找到太多关于由{3AC096D0-A1C2-E12C-1390-A8335801FDAB}标识的测试项目子类型的信息,但是根据https://msdn.microsoft.com/en-us/library/bb166488.aspx,项目子类型可以包括自定义内容:

 - saving additional data in the project file,
 - adding or filtering items in the Add New Item dialog box,
 - controlling how assemblies are debugged and deployed,
 - and extending the project Property Pages dialog box.

在上下文菜单中右键单击“测试项目” -> 在“添加”子菜单中,您可以看到测试项“单元测试”,“有序测试”,“通用测试”。添加“单元测试”会为MSTest生成一个测试类模板。

此外,它还包含其他数据:

<TestProjectType>UnitTest</TestProjectType>
<IsCodedUITest>False</IsCodedUITest> 

看起来这个项目子类型相当于MSTest特定的。

所以如果不使用MSTest(例如使用xUnit),我更喜欢类库。

另一个论点可能是在.Net Core项目中,不希望使用项目风格(子类型)的方式进行操作,实际上,.Net Core测试模板是类库。请参见讨论:https://social.msdn.microsoft.com/Forums/vstudio/en-US/061aaf74-bb13-4646-9d69-064f6f1b8ef6/net-core-project-subtypes

额外福利:xUnit.net.TestGenerator扩展程序会生成一个测试项目子类型,如果您没有选择现有项目(可能是因为它只是VS生成工具的xUnit适配器)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接