1

我在 C# 中创建了一个 UnitTesting 项目并面临一些问题。

首先,我想做一些在开始时应该只发生一次的 Connect 功能。之后,我试图从 Excel 文件中读取一些记录并测试一些插入操作,并且每次插入发生时 TestCleanUp() 在调用该构造函数然后调用 Initialize 方法后被触发。我不希望构造函数在每条记录仅插入一次后触发。我很困惑将我的 Connect 功能放在哪里以及如何避免每次都调用构造函数。

[TestClass]
    public class TestConnection
    {
        private TestContext testContextInstance;
        private static iCAM70003SDKC o_DeviceControl = null;

        /// <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;
            }
        }



        [ClassInitialize()]   
        public static void Initialize()
        {

            int iResult = 0;
            EOperationalMode OperationalMode;



        }

现在我可以按照建议在 ClassInitialize 中建立初始连接。现在,当我在 ClassInitialize 中创建我的 COM 对象的实例时,现在正在建立初始连接。现在我有不同的测试方法要测试。现在,当我运行我的程序时,在执行第一个测试方法“无法使用已与其底层 RCW 分离的 COM 对象”后出现异常?

我猜当它试图执行第二个测试方法时 COM 对象被破坏了。如何保持这个 COM 对象活着?我不是在调用 ReleaseCOMObject。

4

2 回答 2

2

您可以制作一个用 [ClassInitalize] 装饰的静态方法,它只会为测试类运行一次。这是建立初始连接的好地方。

于 2012-10-05T11:44:23.917 回答
1

是的,在您的初始化方法上使用 [ClassInitialize] 属性。这只会为您的班级运行一次。

[ClassInitialize]
public static void Initialize() { ... }

如果您使用的是 NUnit,则等效为 [TestFixtureSetup]

确保您的 TestContext 是公开的,这样它就不会为空

如果您仍然遇到空问题,以下链接可以帮助您 http://social.msdn.microsoft.com/Forums/en-US/vsautotest/thread/e9beee26-4927-4a60-b306-555f47cb3958/

于 2012-10-05T12:17:52.917 回答