C# 从Windows窗体运行测试时,TestContext为null
我遇到了一个与从C# 从Windows窗体运行测试时,TestContext为null,c#,testing,visual-studio-2013,coded-ui-tests,C#,Testing,Visual Studio 2013,Coded Ui Tests,我遇到了一个与从Windows窗体运行CodedUITests相关的问题。(它与测试资源管理器一起在CodedUITestProject中工作) 这是我的代码测试结构: [CodedUITest] public class DBTest { #region Static Fields public static CSVReader csvReader; #endregion #region Fields
Windows窗体运行CodedUITests
相关的问题。(它与测试资源管理器一起在CodedUITestProject
中工作)
这是我的代码测试结构:
[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的测试资源管理器中完美运行,testContextInitialize变量被初始化。
在相同的解决方案中
我添加了第二个项目,一个简单的Windows窗体应用程序,添加了对我的DLL的引用(来自引用),该DLL运行以下代码:
Playback.Initialize();
DBTest a = new DBTest();
a.steamAccess();
Playback.Cleanup();
发生NullReferenceException时,当我从程序集外部运行测试时,testContex为null。
在这件事上我需要一些帮助,谢谢
编辑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,其中包含一些必需的参数,运行逻辑的大多数方法都来自我的数据库。几个月前我已经做过了,但我勉强做到了,因为在像我这样的启动器中使用MsTest这样的工具会增加性能开销。
对任何感兴趣的人来说,在VS的安装目录中有一个文件,名为VsDevCmd.bat,我在一个隐藏在后台的cmd中加载这个.bat,并使用一些额外的命令(mstest、testcontainer、test)。这是可行的,但正如我所说,我没有其他合理的想法。
我的表单中可能也缺少引用库?可能是某种东西,初始化testenvironment和testContext变量的.dll。
我写这篇文章是因为可能还有其他人在寻求同样的结果。为了澄清我的评论:C#中默认为internal,所以将某个东西声明为抽象就像将其声明为“internal abstract”
对于InternalsVisibleTo,必须使库项目对测试项目可见,而不是相反:
[assembly:InternalsVisibleTo(“MyTestProject”)]请看这里:,或者将testContex类公开I可能是错误的,但TesContext类在其自己的定义中声明为公开抽象。我按照您的建议尝试了[assembly:InternalsVisibleTo(“MyProjName”)],但没有取得多大成功。此外,我的testContext已声明为公共。可能重复的编码UI测试将由我的Microsoft编写和提供的软件运行。据我所知,他们没有记录确切的要求,但他们确实提供了类似mstest
的程序以及代理和控制器。请尝试添加对所有dll的引用,以便在winforms项目中运行codedui测试