Переключение между использованием NUnit и MSTest для модульного тестирования - PullRequest
21 голосов
/ 02 апреля 2009

Как я могу настроить решение .NET (C #, .NET 2.0), чтобы позволить другим разработчикам использовать те же модульные тесты для решения, использующего NUnit или MSTest?

Справочная информация:

В этом проекте некоторые разработчики используют VS2005 Team Edition, а другие используют VS2005 Pro, поэтому не все разработчики могут запускать MSTest. Учитывая, что это корпоративный проект, команда не может использовать TestDriven.net или ReSharper. Я знаю, что использование любого из этих продуктов с VS решит эту проблему, но учитывая время, которое потребуется для авторизации покупки лицензий, покупка любого из этих продуктов не является жизнеспособным вариантом.

Заранее спасибо за помощь, MagicAndi.

Ответы [ 3 ]

24 голосов
/ 02 апреля 2009

Лучшее решение, которое я нашел, - использовать простой фрагмент кода, который я нашел в этой статье . Просто используйте этот фрагмент кода в разделе пространства имен каждого тестового файла .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 Configuration Manager (через панель инструментов VS или свойства решения). Кроме того, вам необходимо заменить все экземпляры атрибута Test NUnit в ваших методах, чтобы использовать атрибут MSTest TestMethod (или наоборот).

РЕДАКТИРОВАТЬ: Обновленный фрагмент кода выше, чтобы включить возможное исправление для проблемы Jamie Ide указал в комментариях Обратите внимание, мне не удалось проверить это исправление. Обновленный фрагмент кода взят из комментария Саймона к этому сообщению в блоге .

9 голосов
/ 31 июля 2015

Если вы не хотите изменять любой тестовый код (т. Е. Не хотите добавлять псевдонимы вверху), эта прокладка мне подходит:

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
    {
    }
}

Это помогло мне запустить MSTest через NUnit (по крайней мере, в моно с Xamarin Studio). Просто включите файл и получите правильные ссылки (вам может понадобиться другой файл проекта или условные ссылки ), и все хорошо.

1 голос
/ 02 апреля 2009

У вас есть смесь существующих тестов? Если нет, или вы не против конвертировать существующие MSTests, я бы стандартизировал NUnit. Я настоятельно предпочитаю NUnit, а не MSTest; это быстрее и не заставляет вас иметь глупости TestContext в ваших тестовых классах. Он также более совместим с CI-серверами.

...