从基类的虚方法访问TestContext时,它为null

use*_*888 10 c# automated-tests mstest ui-testing

我有一个基类ScriptBase,它有一个名为的虚函数MyTestInitialize().当我打电话MyTestInitialize()从派生类,则该值testContextInstancenull.这有什么解决方案吗?请帮忙,因为我是自动化测试的新手.提前致谢

[CodedUITest]
public class ScriptsBase
{
    public ScriptsBase()
    {   
    }

    private static TestContext bingTestContext;

    public static TestContext BingTestContext
    {
        get { return ScriptsBase.bingTestContext; }
        set { ScriptsBase.bingTestContext = value;}
    }

    #region TestInitialize
    //Use TestInitialize to run code before running each test 
    [TestInitialize()]
    public virtual void MyTestInitialize()
    {
        Browser.CloseAllBrowsers();
        BingTestContext = testContextInstance;
    }
    #endregion

    #region TestCleanup
    //Use TestCleanup to run code after each test has run
    [TestCleanup()]
    public virtual void MyTestCleanup()
    {
        PPI.HomePage = new HomePageUI();
        Browser.CloseAllBrowsers();
    }
    #endregion

    #region TestContext
    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext
    {
        get
        {
            return testContextInstance;
        }
        set
        {
            testContextInstance = value;
        }
    }
    private TestContext testContextInstance;
    #endregion
}

 public class DestinationMasterTestScripts : ScriptsBase
  {
       public DestinationMasterTestScripts()
       {      
       }

       [TestInitialize()]
       public override void MyTestInitialize()
       {
           Console.WriteLine("Initialize");
           base.MyTestInitialize();
       }
   }     
Run Code Online (Sandbox Code Playgroud)

Jen*_*ter 7

尝试创建一个ClassInitialize方法:

    private static TestContext bingTestContext

    [ClassInitialize]
    public static void ClassInit(TestContext con)
    {
      bingTestContext = con;
    }
Run Code Online (Sandbox Code Playgroud)

  • 我做了一些测试(MsTest,Visual Studio 2012),并且使用“正常”TestContext 属性,MsTest 为每个 *test 方法 * 分配一个 *不同的 *TestContext 实例。使用此处给出的`ClassInitialize` 方法,您将在类中的*所有* 测试方法之间共享*一个*`TestContext` 实例。这意味着如果您的单元测试在测试上下文中存储任何内容或通过其“WriteLine”方法写入测试上下文,则它们不再相互隔离。 (2认同)

Nat*_*han 5

另一种选择是在您的基类中将 TestContext 声明为抽象

public abstract TestContext TestContext { get; set; }
Run Code Online (Sandbox Code Playgroud)

并在您最派生的具体类中覆盖它

public override TestContext TestContext { get; set; }
Run Code Online (Sandbox Code Playgroud)