Подтвердить что ты не робот

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

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

Фон:

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

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

4b9b3361

Ответ 1

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

EDIT: обновленный фрагмент кода выше, чтобы включить возможное исправление проблемы Jamie Ide в комментариях. Заметьте, мне не удалось проверить это исправление. Обновленный фрагмент кода взят из комментария Саймона об этом сообщении .

Ответ 2

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

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). Просто включите файл и получите правильные ссылки (вам может понадобиться другой файл проекта или условные ссылки), и все хорошо.

Ответ 3

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