Создание модульных тестов поддерживается только для нетестового проекта и внутри общего класса или общего метода
Пишу программу на C# и пытаюсь разобраться в модульных тестах. Вызываю контекстное меню в Visual Studio и нажимаю "Создать модульные тесты". После этого появляется окно с сообщением "Создание модульных тестов поддерживается только для нетестового проекта и внутри общего класса или общего метода". Пыталась понять, в чём проблема. Узнала, что тесты можно писать только для управляемого кода. Но ведь код на С# всегда управляемый или нет? И что такое общие класс или метод?
Добавлено: Делаю WPF-проект. Выделяю название класса и щёлчком правой клавиши мыши вызываю меню, где и выбираю пункт с созданием модульных классов. Пример класса из проекта (для него и всех остальных классов тесты не создаются):
lass FileIOService
{
private readonly string PATH;
public FileIOService(string path)
{
PATH = path;
}
public List<Date> LoadData(Date date)
{
var fileExists = File.Exists(PATH);
if (!fileExists)
{
List<Date> dateList = new List<Date>();
dateList.Add(date);
SaveData(dateList);
return dateList;
}
else
{
using (StreamReader file = File.OpenText(PATH))
{
JsonSerializer serializer = new JsonSerializer();
List<Date> dateList = (List<Date>)serializer.Deserialize(file, typeof(List<Date>));
int num = 0;
foreach(Date day in dateList)
{
if(day == date)
{
num = 1;
}
}
if (num == 0)
dateList.Add(date);
return dateList;
}
}
}
public void SaveData(object dates)
{
using (StreamWriter file = File.CreateText(PATH))
{
JsonSerializer serializer = new JsonSerializer { Formatting = Formatting.Indented };
serializer.Serialize(file, dates);
}
}
}
Google о такой проблеме не ведает, и это расстраивает. Очень нужно понять, в чём дело. Буду рада любой подсказке!
Ответы (2 шт):
Всё оказалось максимально просто: нужно было сделать класс публичным:
public class FileIOService { ... }
Так вот что такое "общий класс". (:
Можно было не делать класс публичным, а поступить иначе - установить специальный атрибут сборки тестируемого проекта:
<ItemGroup>
<AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
<_Parameter1>$(AssemblyName).Tests</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Где $(AssemblyName).Tests - имя тестирующей сборки.
Данный атрибут предоставляет возможность сборке с именем $(AssemblyName).Tests видеть все internal - сущности текущего проекта.