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测试