Запрет на обнаружение тестов в Visual Studio Test Explorer в общей библиотеке .NET Standard - PullRequest
2 голосов
/ 05 мая 2019

У меня есть 3 тестовых проекта со следующей иерархией зависимостей:

Tests.Common (.NET Standard library)
    Tests.DotNetCore (.NET Core library)
    Tests.Wpf (.NET Framework library)

Идея состоит в том, чтобы определить методы тестирования как вызов метода RunTests в Tests.Common:

// using xUnit
// using System.Linq.Expressions
// using static System.Linq.Expressions.Expression

namespace Tests.Common {
    public class TestBase {
        protected virtual void RunTest(Expression expr, string result) { ... }
    }
    public class Constructed {
        [Fact]
        public void ConstructBinary() => 
            RunTest(
                Add(Constant(5), Constant(42)),
                "5 + 42"
            );
    }
}

, а затем в Tests.Wpf я могу протестировать те же выражения с классами виртуальных машин только для пользовательского интерфейса, переопределив метод RunTests:

// using ExpressionToString.Wpf

namespace Tests.Wpf {
    public class Constructed : Tests.Common.Constructed {
        public override void RunTest(Expression expr, string result) {
            var vm = new ExpressionVM(expr);
            // at this point, all I want to test is that the VM class is created successfully
        }
    }
}

Моя проблема в том, что Visual Studio Test Explorer обнаруживаетметоды тестирования в Tests.Common, даже если тесты xUnit в стандартной библиотеке .NET не могут быть запущены; им требуется библиотека для конкретной платформы (поэтому у меня есть Tests.DotNetCore тестовый проект и дополнительная цепочка наследования там.)

Как я могу предотвратить Visual Studio TestПроводник отображает тесты в стандартной библиотеке .NET?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Объявите базовый класс в проекте Common как abstract.

Это должно заставить тестовый обозреватель исключить базовый класс как класс тестов и распознавать методы тестирования во всех классах-потомках.

0 голосов
/ 06 мая 2019

Не устанавливайте атрибуты [Fact] для них, а только для фактических реализаций.

Логика обнаружения тестов основана на сопоставлении атрибутов [Fact] для методов с поддерживаемыми сигнатурами xUnit в тестовых проектах. Не используйте атрибуты [Fact] в реализации верхнего уровня, но только в переопределенных методах, которые используются для выполнения реальных тестов. Это предотвратит их обнаружение на любом уровне как в Visual Studio Test Explorer, так и в бегунах xUnit. Если вы хотите напрямую использовать метод верхнего уровня, переопределите его и вызовите base.RunTest () в теле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...