1

启动类并将该初始化保存在变量中以供其他方法使用而不是每次都启动的最佳方法是什么。

这是我的代码:

private Employee employee;
public Employee SystemUnderTest
{
   get 
   {
       if (employee == null)
       {
          employee = new Employee();
       }
      return employee;
   }
}

//..method1 Test1
   public void TestMethod1()
   {
     Assert.IsTrue(SystemUnderTest.IsActive());
   }

   //..method2 Test   
   public void TestMethod2()
   {
     Assert.IsTrue(SystemUnderTest.IsEmployeeExists());
   }

PS:调试时我注意到它确实用每个方法初始化了 Employee 对象。

使用 3.5 框架。

4

4 回答 4

0

单例模式(变体之一,延迟初始化):

public class Singleton
{
    private readonly static object _lockObject = new object();
    private static Singleton _instance;

    public static Singleton Instance {
        get
        {
            if (_instance == null)
            {
                lock (_lockObject)
                {
                    if (_instance == null)
                        _instance = new Singleton();
                }
            }
            return _instance;
        }
    }
}
于 2012-10-09T23:00:02.643 回答
0

静态初始化应该可以工作。这将在您第一次访问该类型时运行,并且共享变量将可用于所有实例。

private static bool m_HasInitialized = false;

private static MyClassName()
{
    // Do Stuff...
    m_HasInitialized = true;
}
于 2012-10-09T22:53:16.517 回答
0

如果我正确理解您的问题,请在您的测试类中创建一个私有字段来保存包含初始化信息的变量,然后使用带有 [TestInitialize] 或 [TestSetUp] 属性(取决于您的测试框架)装饰的方法来初始化信息。这将使您的所有测试方法都可以看到私有字段,但您只需在一个地方定义初始化。这还具有为每个测试方法重新初始化变量的额外好处,这样如果一个测试意外地改变了变量的状态,它不应该导致其他测试中断。

但是,如果您真的希望初始化只发生一次(而不是只定义一次代码),请使用 [TestFixtureSetUp] 或 [ClassInitialize] 属性。

于 2012-10-09T22:56:10.717 回答
0

您可以在类静态构造函数中初始化一个静态字段,或者您可以使用[ClassInitialize] * unit test 属性来标记您希望在该单元测试类中的任何测试方法执行之前执行的方法。

更多信息在这里:您是否使用 TestInitialize 或测试类构造函数来准备每个测试?为什么?

于 2012-10-09T22:56:50.567 回答