测试枚举和字符串 - .NET Core 3.1 和 xUnit
Testing for Enum and a String - .NET Core 3.1 and xUnit
我是 TDD 的新手,我有一个采用 Enum
和 string
的方法。读了一些书后,我发现测试一个 Enum
是不值得做的,除非你在 Enum
class 中有一些方法(如果我错了请纠正我)。
我正在测试的其他方法很简单,接受一个 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
但在 CreateLog
方法中处理预期 enum
的最佳方法是什么:
[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
并将其传入。
解决这种情况的最佳方法是什么?
我不知道我是否理解得很好,但是如果在上面的测试中只有字符串很重要,你可以使用 It.IsAny<T>
模拟枚举,来自 Moq 包。
顺便说一句,如果您不定义 Nullable,Enum 参数永远不会为 null。
我是 TDD 的新手,我有一个采用 Enum
和 string
的方法。读了一些书后,我发现测试一个 Enum
是不值得做的,除非你在 Enum
class 中有一些方法(如果我错了请纠正我)。
我正在测试的其他方法很简单,接受一个 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
但在 CreateLog
方法中处理预期 enum
的最佳方法是什么:
[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
并将其传入。
解决这种情况的最佳方法是什么?
我不知道我是否理解得很好,但是如果在上面的测试中只有字符串很重要,你可以使用 It.IsAny<T>
模拟枚举,来自 Moq 包。
顺便说一句,如果您不定义 Nullable,Enum 参数永远不会为 null。