Создание модульных тестов поддерживается только для нетестового проекта и внутри общего класса или общего метода

Пишу программу на 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 шт):

Автор решения: Stacie Shpit

Всё оказалось максимально просто: нужно было сделать класс публичным:

public class FileIOService { ... }

Так вот что такое "общий класс". (:

→ Ссылка
Автор решения: Andrei Khotko

Можно было не делать класс публичным, а поступить иначе - установить специальный атрибут сборки тестируемого проекта:

<ItemGroup>
    <AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo">
        <_Parameter1>$(AssemblyName).Tests</_Parameter1>
    </AssemblyAttribute>
</ItemGroup>

Где $(AssemblyName).Tests - имя тестирующей сборки.

Данный атрибут предоставляет возможность сборке с именем $(AssemblyName).Tests видеть все internal - сущности текущего проекта.

→ Ссылка