我有一个与从 Windows Form
运行 CodedUITests
相关的问题。 (它在带有 Test-Explorer 的 CodedUITestProject
中工作)。
这是我的 CodedUITest 的结构:
[CodedUITest]
public class DBTest
{
#region Static Fields
public static CSVReader csvReader;
#endregion
#region Fields
public string logFileName;
public string timer = String.Empty;
public TestRead testRead;
public UploadResults uploadResults;
private DateTime testStart;
#endregion
[ClassInitialize]
public static void MyTestInitialize(TestContext test)
{
csvReader = new CSVReader();
csvReader.LoadTestValues("steam.csv");
}
[TestInitialize]
public void testInit()
{
testStart = DateTime.Now;
}
[TestMethod(), TestCategory("Reflection"), TestCategory("DataDriven"), DataSource("Microsoft.VisualStudio.TestTools.DataSource.CSV", @"|DataDirectory|\CSV's\steam.csv", "steam#csv", DataAccessMethod.Sequential), DeploymentItem(@"..\..\CSV's\steam.csv")]
public void steamAccess()
{
testRead = new TestRead();
SteamMap a = new SteamMap();
testRead.Read(a, TestContext);
}
[TestCleanup]
public void TestCleanup()
{
uploadResults = new UploadResults();
//timer for each test ( in seconds )
double diffSecs = (DateTime.Now - testStart).TotalSeconds;
uploadResults.TestUpload(testRead.TestResults, csvReader.DataTable, diffSecs,TestContext);
}
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
private TestContext testContextInstance;
}
这在 VS 的 Test Explorer
中完美运行,testContextInitialize 变量被初始化。
在同一个 Solution
中,我添加了第二个项目,一个简单的 Windows 窗体应用程序,添加了对运行以下代码的 DLL 的引用(来自 References):
Playback.Initialize();
DBTest a = new DBTest();
a.steamAccess();
Playback.Cleanup();
发生 NullReferenceException,当我从它的程序集外部运行我的测试时,我的 testContex 为空。 在这件事上我需要一些帮助,谢谢
编辑 1: 测试类:
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Input;
using System.Windows.Forms;
using System.Drawing;
using Microsoft.VisualStudio.TestTools.UITesting;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UITest.Extension;
using Keyboard = Microsoft.VisualStudio.TestTools.UITesting.Keyboard;
using System.Linq;
using System.Reflection;
using SimarpiDB.GLobal;
using SimarpiDB.UITestMaps.SteamMapClasses;
using SimarpiDB.Global;
using System.Data;
using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("TestLauncher")]
namespace SimarpiDB
{
[CodedUITest]
public class.....
编辑 2: 临时解决方法,直到找到此错误的原因: 从我的 Windows 窗体中,我启动了一个 MSTest,其中几乎没有必需的参数,并且大部分运行什么方法的逻辑都将来 self 的数据库。几个月前我已经这样做了,但我放弃了它,因为在像我这样的启动器中使用诸如 MsTest 之类的工具会产生额外的性能开销。 对于任何感兴趣的人,在 VS 的安装目录中有一个文件,它称为 VsDevCmd.bat,我将这个 .bat 加载到隐藏在后台的 cmd 中,并使用一些额外的命令(mstest、testcontainer、test)。这行得通,但正如我所说,我没有其他合理的想法。 我的表单中可能还缺少引用的库?也许是什么东西,一个初始化测试环境和 testContext 变量的 .dll。 我写这篇文章是因为可能还有其他人寻求相同的结果。
最佳答案
澄清一下我的评论:内部是 C# 中的默认值,因此将某些内容声明为抽象就像将其声明为“内部抽象”。
对于 InternalsVisibleTo,您必须使库项目对测试项目可见,而不是相反: [程序集:InternalsVisibleTo("MyTestProject")]
关于c# - 从 Windows 窗体运行测试时 TestContext 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30011160/