Должен ли [TestMethod] быть публичным?Какие последствия есть, если это не так? - PullRequest
0 голосов
/ 08 февраля 2019

Я использую средства тестирования, предоставленные Microsoft.VisualStudio.TestPlatform.TestFramework.У меня есть метод испытания, украшенный [TestMethod].Я хочу реализовать этот тест для различных комбинаций параметров, используя [DataRow].Одним из параметров, который понадобится методу, является тип enum, объявленный как внутренний в другой сборке;сборка, в которой определен тип enum, дает сборке, содержащей модульные тесты, доступ к своим внутренним объектам через InternalsVisibleTo.

Насколько я могу судить, методы модульных тестов общедоступны в открытом классе.Когда речь заходит об этом методе модульного тестирования, либо метод тестирования должен быть недоступен извне сборки модульного теста (достигается за счет того, что он является частным или внутренним, либо путем создания класса тестирования, который содержит его внутри), либо перечисление должно быть общедоступным.Публикация enum была бы неуместной, поэтому было бы правильным сделать метод тестирования внутренним.

Есть ли какие-либо возможные негативные последствия для внутреннего метода модульного теста?

Этот вопрос, несомненно, являетсяпростой, который имеет простой ответ.Я спрашиваю это, потому что у меня нет никакого успеха вообще, ища Интернет для ответа на это.Все, что я могу найти, - это дискуссии о том, следует ли тестировать частные методы или нет.

Примечание. Если вы даете комментарий или ответ, который не отвечает на мой вопрос, но вместо этого предлагает или подразумевает, что неправильно тестировать внутренних членовсборка с использованием InternalsVisibleTo, тогда я отклоню ваш ответ из-под контроля.

Примечание 2: В этом случае можно использовать один строковый параметр вместо параметра enumиспользуйте Enum.Parse в методе test и передайте все соответствующие параметры в виде строк, созданных с помощью оператора nameof.Мне это не нравится, но это может быть наименее плохой обходной путь.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

[TestMethod] s должен иметь доступ public. Здесь документация Microsoft по этому вопросу.

Следствием этого является то, что он не будет работать, если private.

0 голосов
/ 08 февраля 2019

По крайней мере для MSTest, тестер в Visual Studio не будет обнаруживать методы, которые не являются публичными при запуске.Вот быстрый пример.

[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1() => Assert.IsTrue(true);

    [TestMethod]
    internal void TestMethod2() => Assert.IsTrue(false);
}

В результате один тест был обнаружен, запущен и пройден.Так что я бы посчитал это серьезным негативным следствием отсутствия открытых методов тестирования.

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