Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有更好的方法来检查项目是基于NUnit还是基于MSTest的?_C#_.net_Unit Testing_Nunit_Mstest - Fatal编程技术网

C# 有没有更好的方法来检查项目是基于NUnit还是基于MSTest的?

C# 有没有更好的方法来检查项目是基于NUnit还是基于MSTest的?,c#,.net,unit-testing,nunit,mstest,C#,.net,Unit Testing,Nunit,Mstest,我想检查c#项目是基于NUnit还是基于MSTest。目前,我阅读了csproj的文件,并查找如下所示的特定字符串 const string MSTEST_ELEMENT = "<TestProjectType>UnitTest</TestProjectType>"; const string NUNIT_ELEMENT = @"<Reference Include=""nunit.framework"">"; var file = File.ReadAll

我想检查c#项目是基于NUnit还是基于MSTest。目前,我阅读了csproj的文件,并查找如下所示的特定字符串

const string MSTEST_ELEMENT = "<TestProjectType>UnitTest</TestProjectType>";
const string NUNIT_ELEMENT = @"<Reference Include=""nunit.framework"">";

var file = File.ReadAllText("C:\myfile.csproj");

if (file.Contains(NUNIT_ELEMENT))
{
    result = TestProjectType.NUnit;
} 
else if (file.Contains(MSTEST_ELEMENT))
{
    result = TestProjectType.MSTest;
}
常量字符串MSTEST\u ELEMENT=“UnitTest”; 常量字符串NUNIT_元素=@“”; var file=file.ReadAllText(“C:\myfile.csproj”); if(file.Contains(NUNIT_元素)) { 结果=TestProjectType.NUnit; } else if(file.Contains(MSTEST_元素)) { 结果=TestProjectType.MSTest; }
它的工作原理和我预期的一样,但在文件中查找特定文本对我来说很难看。有更好的方法吗?

检查dll参考“NUnit.framework.dll”的解决方案。对于NUnit,必须提供该dll的引用。

您可以使用基于反射的方法-从测试项目加载dll,获取其中的所有公共类型,并检查[TestClass]属性以指示它是否为MSTest,等等

此示例(有效但未真正测试)给出了一个示例。您可以通过在运行此代码的任何程序中引用测试属性类型来改进它,这样您就可以进行适当的类型比较,而不是字符串比较

class Program
    {
        static void Main(string[] args)
        {
            var path =  @"Path\To\Your\Test\Dll";
            //load assembly:
            var assembly = Assembly.LoadFile(path);
            //get all public types:
            var types = assembly.GetExportedTypes();
            foreach (var t in types)
            {
                Console.WriteLine(t.Name);
                //check for [TestClass] attribute:
                var attributes = t.GetCustomAttributes();
                foreach (var attr in attributes)
                {
                    var typeName = attr.TypeId.ToString();
                    Console.WriteLine(attr.TypeId);
                    if (typeName== "Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute")
                    {
                        Console.WriteLine("It's MSTest");
                    }
                    else if (typeName == "Nunit.Tests.TestFixture") //not sure if that's the right type id :)
                    {
                        Console.WriteLine("It's NUnit");
                    }
                    else
                    {
                        Console.WriteLine("I Have no idea what it is");
                    }
                }
            }
            Console.ReadLine();

        }
    }

为什么不能将XML理解为XML?还有,如果两者都存在呢?因为读入XML要比读入纯文本慢。@匿名读取XML是可靠的,搜索字符串是不可靠的。@peer您能给我一个例子,说明读取文件内容和搜索字符串值是不可靠的吗?