我正在尝试从MTM运行CodedUI测试以及在我们的代码库上运行Xunit测试。我应该能够根据我的要求从一个项目运行这些测试,以便以后能够收集测试数据。我已经能够使用反射在同一代码中的两个实例中运行测试,以根据各自的属性调用测试方法。
问题是,然后对于UI和Xunit测试,测试资源管理器都没有注册测试正在通过或失败。我假设测试环境必须进行一些初始化,但我找不到任何资源。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CodedUITestProject1;
using Microsoft.VisualStudio.TestTools.UITesting;
using CodedUITestProject2;
using System.Reflection;
using ConsoleApplication1;
namespace Run_UI_From_Outside
{
class Program
{
static void Main(string[] args)
{
// This section uses reflection to find Test Methods in the CodedUITest class bases on their attributes
var assembly = typeof(CodedUITestProject2.CodedUITest1).Assembly;
var attributes = assembly.GetCustomAttributes(typeof(CodedUITestProject2.CodedUITest1), true);
var types = assembly.GetTypes();
foreach (var t in types)
{
var ca = t.CustomAttributes;
foreach (var item in ca)
{
if (item.AttributeType == typeof(Microsoft.VisualStudio.TestTools.UITesting.CodedUITestAttribute))
{
object myInstance = Activator.CreateInstance(t);
MethodInfo myInstanceMethod = t.GetMethod("CodedUITestMethod1");
Playback.Initialize();
var test = myInstanceMethod.Invoke(myInstance, null);
Playback.Cleanup();
}
}
}
// This section uses reflection to find Xunit Methods in the CodedUITest class bases on their attributes
var assemblyXunit = typeof(ConsoleApplication1.Tests.SampleTest).Assembly;
var xunitMethods = assemblyXunit.GetTypes().SelectMany(t => t.GetMethods())
.Where(a => a.GetCustomAttributes(typeof(Xunit.FactAttribute), false).Length > 0)
.ToArray();
foreach (var t in xunitMethods)
{
object myMethodInstance = Activator.CreateInstance(t.DeclaringType);
t.Invoke(myMethodInstance, null);
}
}
}
}