web-dev-qa-db-ja.com

MStestですべてのテストの実行が終了した後にコードを実行することは可能ですか?

コード化されたUIテストを作成していますが、アプリケーションがまだ開いていない場合は開いています。次に、そのうちの1つが失敗した場合、アプリケーションを閉じます。複数のプロジェクトに複数のテストがあります。すべてのテストの実行が完了した後でアプリケーションを閉じる方法はありますか? testSettingsファイルに何かありますか?

これがまったく役に立った場合、すべてのテストクラスは1つのcodeduiTestBaseから派生します。これは、私が持っている設定をセットアップする方法です。

アプリケーションは大きなアプリケーションであり、ロードに時間がかかりすぎるため、各テストの実行の前後にアプリケーションを開いたり閉じたりする必要はありません。

22
jgerstle

はい、可能です。この目的でAssemblyCleanup属性を使用できます。

アセンブリ内のallテストの実行後に使用され、アセンブリによって取得されたリソースを解放するためのコードを含むメソッドを識別します。

実行時間に従って配置されたすべてのMSTestメソッドの概要は次のとおりです。

using Microsoft.VisualStudio.TestTools.UnitTesting;
using SampleClassLib;
using System;
using System.Windows.Forms;

namespace TestNamespace
{
    [TestClass()]
    public sealed class DivideClassTest
    {
        [AssemblyInitialize()]
        public static void AssemblyInit(TestContext context)
        {
            MessageBox.Show("AssemblyInit " + context.TestName);
        }

        [ClassInitialize()]
        public static void ClassInit(TestContext context)
        {
            MessageBox.Show("ClassInit " + context.TestName);
        }

        [TestInitialize()]
        public void Initialize()
        {
            MessageBox.Show("TestMethodInit");
        }

        [TestCleanup()]
        public void Cleanup()
        {
            MessageBox.Show("TestMethodCleanup");
        }

        [ClassCleanup()]
        public static void ClassCleanup()
        {
            MessageBox.Show("ClassCleanup");
        }

        [AssemblyCleanup()]
        public static void AssemblyCleanup()
        {
            MessageBox.Show("AssemblyCleanup");
        }

        [TestMethod()]
        [ExpectedException(typeof(System.DivideByZeroException))]
        public void DivideMethodTest()
        {
            DivideClass.DivideMethod(0);
        }
    }
}

参照: MSTest-Methods

52
MUG4N

[〜#〜]重要[〜#〜]

基本クラスを使用している人は、そこでアセンブリのクリーンアップも行うことができます

[TestClass]
public class Page : PageContract, IWindowControlAccess
{
[AssemblyCleanup()]
    public static void ApplicationCleanup()
    {
        Cleanup();
    }
}

ここで2つの重要なこと1.ベースの[TestClass]属性は必須です

2. ApplicationCleanupの署名は、そのstaticメソッドを参照してください

これで完了です。私はそれを苦労してデバッグするのに苦労しました。

1
TARJU

おそらくあなたが探しているのは TestCleanup属性

編集:また、すべてのテストが実行された後に何かを実行したい場合は、 AssemblyCleanupAttribute がより適切かもしれません。

0
jamesmillerio

1つのクラス内のすべてのテストが終了した後でクリーンアップするだけの場合は、AssemblyCleanup属性ではなくClassCleanup属性を使用します。

0
Ciaran