从logger文件到测试用例文件调用时,testContextInstant值始终为Null

时间:2013-11-17 22:36:14

标签: c# unit-testing logging vs-unit-testing-framework testcontext

我已经阅读了一些关于MStest的TestContext的信息,可以相应地使用它。

现在我关于TestContext的任务有点不同,并且让人感到困惑。它可以起作用。

与三个文件相关的情况:

  1. 在testcase.cs文件中,TestContext属性位于[Test Class]中。但在[TestMehtod]中,我不想直接使用类似testContextInstance.WriteLine(“WRITE TEST PARAMETERS”),它将被放入另一个名为TestLogger.cs的文件中。

    [TestClass]
    public class Test1 : BaseTestTemplate
    {
        public TestContext TestContext { get; set; }
    
        public static void FixtureSetUp(TestContext testContext)
        {
        }
    
        public static void FixtureTearDown(TestContext testContext)
        {
        }
    
        [TestInitialize]
        public override void SetUp()
        {
        }
    
        [TestMethod]
        {
            Logger.BeginSection("WRITE TEST PARAMETERS"); // instead of testContextInstance.WriteLine("WRITE TEST PARAMETERS");
        }
    }
    
  2. 在AssemblySetup.cs文件的[AssemblyInitialize]中,公共静态void AssemblySetUp(TestContext testContext)完成,它包含一个函数InitializeLogging();在此函数中,我使用Logger.RegisterLogChannel(LogChannel.TestLog,new TestLogger())初始化TestLogger。

    [TestClass]
    public static class AssemblySetUpClass
    {
        public static void InitializeLogging()
        {
            string testContext = "";
            Logger.RegisterLogChannel(LogChannel.TestLog, new TestLogger(testContext));
       }
    
        [AssemblyInitialize]
        public static void AssemblySetUp(TestContext testContext)
        {
            InitializeLogging();
        }
    }
    
  3. 我在TestLogger.cs中添加了testContextInstance.WriteLine(title)。但在debug中,testContextInstance始终为null。

    public sealed class TestLogger : LoggerBase
    {
        private TestContext testContextInstance;
    
        public TestLogger(string testContext)
        {
        }
    
        public override void BeginSection(string title)
        {
            testContextInstance.WriteLine(title);
            base.BeginSection(title);
        }
    }
    
  4. 我正在尝试修改Logger.RegisterLogChannel(LogChannel.TestLog,新的TestLogger(testContext))目的是告诉TestLogger,将调用testContext。在TestLogger中,我还添加了私有的TestContext testContextInstance;和公共TestLogger(字符串testContext)

    问题仍然是相同的,在警告它说,testContextInstance永远不会被赋值,将始终具有其默认值null

    我希望你能理解我的问题。请给我一些关于如何处理它的想法或解决方案,非常感谢。

1 个答案:

答案 0 :(得分:0)

你有这个代码:

 private TestContext testContextInstance;
 public TestLogger(string testContext)
 {
 }

TestLogger的构造函数是否真的应该为空?问题可能很简单,因为您从未将参数testContext分配给构造函数体中的任何内容。我假设您应该将它分配给构造函数中的testContextInstance

 private TestContext testContextInstance;
 public TestLogger(string testContext)
 {
     testContextInstance = testContext;
 }