21

.NET ソリューション (C#、.NET 2.0) を構成して、他の開発者が NUnit または MSTest を使用してソリューションに同じ単体テストを利用できるようにするにはどうすればよいですか?

バックグラウンド:

このプロジェクトでは、一部の開発者は VS2005 Team Edition を使用し、他の開発者は VS2005 Pro を使用しているため、すべての開発者が MSTest を実行できるわけではありません。これはエンタープライズ プロジェクトであるため、チームは TestDriven.net や ReSharper を利用できません。VS でこれらの製品のいずれかを使用するとこの問題が解決されることは承知していますが、ライセンスの購入を承認するのに時間がかかることを考えると、これらの製品のいずれかを購入することは現実的な選択肢ではありません。

助けてくれてありがとう、MagicAndi。

4

3 に答える 3

26

私が見つけた最善の解決策は、この記事で見つけた単純なコードを利用することです。各 .cs テスト ファイルの名前空間セクションで次のコード スニペットを使用するだけです。

#if NUNIT
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using ClassCleanup = NUnit.Framework.TestFixtureTearDownAttribute;
using ClassInitialize = NUnit.Framework.TestFixtureSetUpAttribute;
#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
#endif

using NUnitAssert = NUnit.Framework.Assert;
using MsAssert = Microsoft.VisualStudio.TestTools.UnitTesting.Assert;

コード スニペットのNUNITは、ソリューションのカスタム ビルド構成を指します。これは、VS 構成マネージャー (VS ツールバーまたはソリューション プロパティ経由) を使用して作成できます。また、メソッドの NUnit の Test 属性のすべてのインスタンスを置き換えて、MSTest の TestMethod 属性を使用する必要があります (またはその逆)。

編集:上記のコード スニペットを更新して、ジェイミー イデがコメントで指摘した問題の可能な修正を含めました。注意してください、私はこの修正をテストできませんでした。更新されたコード スニペットは、このブログ投稿に対する Simon のコメントから引用されています。

于 2009-04-02T11:29:06.207 に答える
9

テスト コードを変更したくない場合(つまり、上部にエイリアシングを追加したくない場合)、この shim が機能します。

using System;
using System.Collections;

namespace Microsoft.VisualStudio.TestTools.UnitTesting
{
    public class Placeholder{}
    public class TestClassAttribute : NUnit.Framework.TestFixtureAttribute
    {
    }
    public class TestInitializeAttribute : NUnit.Framework.SetUpAttribute
    {
    }
    public class TestMethodAttribute : NUnit.Framework.TestAttribute
    {
    }
    public class TestCleanupAttribute : NUnit.Framework.TearDownAttribute
    {
    }
    public class IgnoreAttribute : NUnit.Framework.IgnoreAttribute
    {
    }
    public class ExpectedExceptionAttribute : NUnit.Framework.ExpectedExceptionAttribute
    {
        public ExpectedExceptionAttribute(Type exceptionType) : this(exceptionType, null)
        {
        }
        public ExpectedExceptionAttribute(Type exceptionType, string message) : base(exceptionType)
        {
            UserMessage = message;
        }
    }
    public class TestContext : NUnit.Framework.TestContext
    {
        public TestContext(IDictionary dictionary) : base(dictionary)
        {
        }
    }
    public class Assert : NUnit.Framework.Assert
    {
        public static void IsInstanceOfType(object obj, Type type)
        {
            NUnit.Framework.Assert.IsInstanceOfType (type, obj, null);
        }
        public static void IsInstanceOfType(object obj, Type type, string message)
        {
            NUnit.Framework.Assert.IsInstanceOfType (type, obj, message);
        }
    }
    public class CollectionAssert : NUnit.Framework.CollectionAssert
    {
    }
}

これは、NUnit を介して MSTest を実行するのに役立ちました (少なくとも Xamarin Studio の mono の下で)。ファイルをインクルードして参照を正しく取得するだけです (別のプロジェクト ファイルまたは条件付き参照が必要になる場合があります)。

于 2015-07-31T06:31:42.940 に答える
1

既存のテストを組み合わせていますか?そうでない場合、または既存のMSTestを変換してもかまわない場合は、NUnitで標準化します。私はMSTestよりもNUnitを強く好みます。より高速で、テストクラスにTestContextをナンセンスにする必要はありません。また、CIサーバーとの互換性も高くなります。

于 2009-04-02T12:13:15.757 に答える