Przełączanie między użyciem NUnit i MSTest do testowania jednostkowego

Jak skonfigurować rozwiązanie. Net (C#,. Net 2.0), aby umożliwić innym programistom korzystanie z tych samych testów jednostkowych dla rozwiązania przy użyciu NUnit lub MSTest?

Background:

W tym projekcie niektórzy programiści używają VS2005 Team Edition, a inni używają VS2005 Pro, więc nie wszyscy programiści są w stanie uruchomić MSTest. Biorąc pod uwagę, że jest to projekt korporacyjny, zespół nie jest w stanie skorzystać z TestDriven.net albo ReSharper. Zdaję sobie sprawę z tego, że używam któregokolwiek z tych produkty z systemem VS rozwiązałyby ten problem, ale biorąc pod uwagę czas potrzebny na autoryzację zakupu licencji, zakup któregokolwiek z tych produktów nie jest realną opcją.

Z góry dzięki za pomoc, MagicAndi.

Author: MagicAndi, 2009-04-02

3 answers

Najlepszym rozwiązaniem, jakie znalazłem, jest użycie prostego fragmentu kodu, który znalazłem w tym artykule . Po prostu użyj tego fragmentu kodu w sekcji przestrzeni nazw każdego z nich .plik testowy 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 w fragmencie kodu odnosi się do niestandardowej konfiguracji dla rozwiązania. Można to utworzyć za pomocą menedżera konfiguracji VS (poprzez pasek narzędzi VS lub właściwości rozwiązania). Ponadto musisz zastąpić wszystkie instancje atrybutu testowego NUnit na swoich metodach, aby użycie atrybutu MSTest TestMethod (lub odwrotnie).

EDIT: Zaktualizowano powyższy fragment kodu, aby uwzględnić możliwą poprawkę problemu Jamie Ide wskazanego w komentarzach. Uwaga, nie udało mi się przetestować tej poprawki. Zaktualizowany fragment kodu pochodzi z komentarza Simona na tym blogu .

 24
Author: MagicAndi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:45:36

Jeśli nie chcesz zmieniać żadnego kodu testowego (tzn. nie chcesz dodawać aliasingu u góry), Ta podkładka działa dla mnie:

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

Udało mi się uruchomić MSTest przez NUnit (przynajmniej pod mono z Xamarin Studio). Wystarczy załączyć plik i uzyskać odpowiednie referencje (możesz potrzebować innego pliku projektu lub referencji warunkowych ) i jesteś dobry.

 7
Author: Tim Erickson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:25:02

Czy masz mieszankę istniejących testów? Jeśli nie, lub nie masz nic przeciwko konwertowaniu istniejących Mstestów, ustandaryzowałbym NUnit. Zdecydowanie wolę NUnit niż MSTest, jest szybszy i nie zmusza do tego, aby na zajęciach testowych mieć nonsens Testkontekstu. Jest również bardziej kompatybilny z serwerami CI.

 1
Author: Jamie Ide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-02 12:13:15