#asp.net-core #enums #xunit
#asp.net-core #перечисления #xunit
Вопрос:
Я новичок в TDD, и у меня есть метод, который принимает Enum
и string
. После некоторого чтения я обнаружил, что тестирование Enum
на самом деле не стоит делать, если у вас нет некоторых методов в Enum
классе (пожалуйста, поправьте меня, если я ошибаюсь).
Другие мои методы, которые я тестирую, просты и включают в себя string
которые я проверяю на null
или empty
, но когда я пришел к этому методу, я не был уверен, что делать.
public string CreateLog(LoggerLevel level, string message)
{
throw new System.NotImplementedException();
}
Вот Enum
public enum LoggerLevel
{
Verbose,
Debug,
Information,
Warning,
Error,
Fatal
}
Вот как я намеревался справиться с string
но каков наилучший способ обработки ожидаемого enum
в CreateLog
методе:
[Fact]
public void CreateLog_MessageNullOrEmpty()
{
var logger = new Logger();
Assert.Throws<MessageNullOrEmptyException>(() => logger.CreateLog(enum???, null));
Assert.Throws<MessageNullOrEmptyException>(() => logger.CreateLog(enum???, ""));
}
Я думал об использовании [InlineData(LoggerLevel.Verbose), ""]
и [InlineData(LoggerLevel.Debug), null]
. Или создание фиктивного объекта enum
в методе тестирования и передача его.
Каков наилучший способ решения этого сценария?
Комментарии:
1. В этих сценариях я обычно добавляю значение
Unknown
илиNone
к своемуenum
в качестве первого значения. Таким образом, если он создан, но не назначен, он не возвращается к какому-либо недопустимому значению (в данном случаеVerbose
).). Если оно не установлено или его не нужно устанавливать, то оно должно быть описано как таковое. Если вы не можете отредактировать перечисление, просто установите для него какое-либо произвольное значение, поскольку в этом случае это не влияет на результат.
Ответ №1:
Я не знаю, хорошо ли я понял, но если в приведенном выше тесте важна только строка, вы можете издеваться над перечислением с помощью It.IsAny<T>
пакета Moq.
кстати, параметр Enum никогда не будет равен нулю, если вы не определяете его как Nullable .