1

C# で 1 つの UnitTesting プロジェクトを作成しましたが、いくつかの問題に直面しています。

まず、最初に 1 回だけ実行する必要があるいくつかの接続機能を実行したいと考えました。その後、Excelファイルからいくつかのレコードを読み取ろうとして、いくつかの挿入操作をテストしています。挿入が発生するたびに、そのコンストラクターが呼び出されてから Initialize メソッドが呼び出された後に TestCleanUp() が起動されます。各レコードが 1 回だけ挿入された後にコンストラクターが起動することは望ましくありません。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 オブジェクトのインスタンスを作成しているので、初期接続を確立しています。今、私はテストする別の Testmethod を持っています。プログラムを実行すると、最初のテストメソッドを実行した後に例外が発生します。「基礎となる RCW から分離された COM オブジェクトは使用できません」?

2番目のテストメソッドを実行しようとしているときに、COMオブジェクトが破壊されていると思います。この COM オブジェクトを維持するにはどうすればよいですか? 私は ReleaseCOMObject を呼び出していません。

4

2 に答える 2

2

テストクラスに対して一度だけ実行される [ClassInitalize] で装飾された静的メソッドを作成できます。これは、最初の接続を確立するのに最適な場所です。

于 2012-10-05T11:44:23.917 に答える
1

ええ、初期化メソッドで [ClassInitialize] 属性を使用してください。これは、クラスに対して 1 回だけ実行されます。

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

NUnit を使用している場合、同等のものは [TestFixtureSetup] になります。

nullにならないように、TestContextが公開されていないことを確認してください

以下のリンクは、まだ null の問題に直面している場合に役立ちます。

于 2012-10-05T12:17:52.917 に答える