C# 查找解决方案中的所有测试



我可以使用任何技术来查找解决方案中注释为测试的所有测试([TestMethod][Fact][Theory]...)?

上下文: 我对这一切很陌生,但试图制定持续部署策略。我想在发布过程中/之后查找并运行解决方案中的所有测试。 这些不是依赖于生成的单元测试,而是端到端解决方案测试的一部分。

如果我的想法偏离了正确的轨道,请告诉我。

因此,如果你想要一个只收集带有TestAttribute的方法的工具,Visual Studio内置了它。 它是测试资源管理器,它检查解决方案中的程序集,并根据属性挖掘出测试,然后让你运行它们。 它在某些版本的 VS 中可用(我使用专业版,它有它);不过,我不确定究竟是哪些。

通常为此目的编写的应用程序是要走的路。 但是,您可以自己扫描程序集以查找这些属性。 这里并不是真的必要 - 正如我所说,这里有测试工具可以做到这一点,像VSTS这样的东西将帮助您集成到部署过程中 - 但是由于您提到您是所有这些的新手,我将把它留在这里作为将来可能需要或可能不需要使用的东西。 如果没有别的,你可以把它改编成别的东西。

基本上,您可以使用反射来获取程序集、类、方法等,并且可以获取修饰每个程序集的属性。 你会这样做:

[TestClass]
public class AttributeFinder
{
[TestMethod]
public void MyTestMethod()
{
// Do something
}
public static void FindAttributes()
{
var assembly = Assembly.GetAssembly(typeof(AttributeFinder));
var types = assembly.GetTypes();
foreach (var t in types)
{
var typeAttr = t.GetCustomAttribute(typeof(TestClassAttribute));
if (typeAttr != null)
{
// Your class has a TestClass attribute on it!
}
var methods = t.GetMethods();
foreach (var m in methods)
{
var methodAttr = m.GetCustomAttribute(typeof(TestMethodAttribute));
if (methodAttr != null) 
{
// This method has the TestMethod attribute!
}
}
}
}
}

同样,有一些工具可以自动为您执行此操作,QHero为您提供了一些链接。 我在这里介绍的是很长的路要走,需要你编写自己的工具,这对于那里的东西来说是不必要的。 但是反射是一种方便的技术,这可能很有用,比如说,在测试工具之外生成一个报告,列出你的测试方法/类或其他东西。

你打算使用什么样的技术?不确定我是否非常理解您的请求,但如果您打算使用 .NET 单元测试,您可以查看此处:https://learn.microsoft.com/en-us/visualstudio/test/getting-started-with-unit-testing

或者你也可以使用著名的NUnit,https://stackoverflow.com/questions/43007761/how-to-run-nunit-tests-in-visual-studio-2017

最新更新