Методы, доступные только в модульном тестировании

#unit-testing #unity3d #macros

Вопрос:

Я ищу способ сделать методы доступными только в сценариях модульного тестирования.

 public class MyClass
{
    public Data MyData { get; }
    internal MyClass()
    {
        // Complex code setting MyData
    }
#if UNITY_MACROS
    public MyClass(MyData data)
    {
         MyData = data;
    }
#endif
}
 

Необходимо, чтобы общедоступный конструктор был доступен только в сценариях модульного тестирования и сборке.

Я попытался изучить ограничения определения в тестовой сборке, но, вероятно, я неправильно использую, так как не вижу никакой разницы.

Ответ №1:

Что вам нужно, так это использовать атрибут InternalsVisibleTo (MS docs). Вы можете добавить следующую строку либо в исходный файл класса, либо в отдельный файл AssemblyInfo.cs, который вы можете создать в той же папке, что и файл asmdef:

 [assembly: System.Runtime.CompilerServices.InternalsVisibleTo("MyUnitTestAssembly")]
 

В этом случае вы можете оставить MyClass(данные MyData) внутренними.