c# - 从 Windows 窗体运行测试时 TestContext 为空

标签 c# testing visual-studio-2013 coded-ui-tests

我有一个与从 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.....

enter image description here

编辑 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/

相关文章:

c# - 使用 Except 的自定义对象未能使用 IEqualityComparer<T>

c# - 获取窗口开始菜单项/快捷方式文件的 "friendly"名称

C# GUI 线程错误

c# - 保存 Outlook 约会后的事件

spring-boot - Kotlin Spring WebMvcTest Mockk

vb.net - 'var_name' 未声明。由于其保护级别,它可能无法访问。在 Debug模式

selenium - Protractor 比较 2 个字符串数组

testing - 带有决策和声明覆盖率劣势示例的问题

visual-studio-2013 - Visual Studio 2013 的 RC 更新 2 共享项目

javascript - 在 mvc5 中单击复选框时使下拉菜单可见