Разрешение NUnit Сообщение не найден подходящий конструктор

У меня есть класс модульного теста:

[TestFixture]
public class SomeClassIntegrationTests : SomeClass

С общедоступным конструктором:

public SomeClassIntegrationTests (ILogger l) : base(l)
{
}

Когда я пытаюсь запустить тест, я получаю сообщение об ошибке «Подходящий конструктор не найден».

Я попытался изменить атрибут TestFixture на [TestFixture(typeof(ILogger))], но это привело к тому же сообщению об ошибке, которое не позволяет мне запустить или отладить тест.

Есть идеи, как изменить атрибут TestFixture, чтобы запустить тест, или решить эту проблему каким-либо другим способом?


person Dean Kuga    schedule 20.11.2018    source источник
comment
Для работы [TestFixture(typeof(ILogger))] вам понадобится конструктор SomeClassIntegrationTests(Type).   -  person Klaus Gütter    schedule 20.11.2018
comment
@ KlausGütter Это недопустимый конструктор, поскольку SomeClassIntegrationTests наследуется от SomeClass.   -  person Dean Kuga    schedule 20.11.2018
comment
В итоге я создал конструкторы без параметров в базовом классе и тестовом классе, которые разрешили проблему отсутствия подходящего конструктора, но я оставлю вопрос открытым на случай, если кто-то знает, как следует изменить атрибут TestFixture в этом сценарии.   -  person Dean Kuga    schedule 20.11.2018
comment
Вы не можете. Параметры атрибута должны быть константами одного из следующих типов: bool, byte, char, double, float, int, long, sbyte, short, string, uint, ulong, ushort, System.Type, enum, массивы этих типов. Невозможно указать ILogger в качестве параметра атрибута. Смотрите мой ответ о возможных альтернативах.   -  person Klaus Gütter    schedule 21.11.2018


Ответы (1)


Вероятно, вам понадобится экземпляр класса, реализующего ILogger.

Вариант 1: используйте null (если регистратор на самом деле не требуется):

[TestFixture(null)]

Вариант 2: всегда использовать один и тот же конкретный класс (или макет): добавить конструктор без параметров

SomeClassIntegrationTests()
: this(new MyLogger())
{
}

а также

[TestFixture]

Вариант 3: вы можете протестировать с разными регистраторами

SomeClassIntegrationTests(Type t)
: this((Ilogger)Activator.CreateInstance(t))
{
}

а также

[TestFixture(typeof(MyLogger))]
person Klaus Gütter    schedule 20.11.2018