我有 IValidatableObject 和 Validate 方法。如何为这个对象和这个方法编写单元测试? (我使用 xUnit)。如何模拟上下文?以下对象的代码。
public class Settings: IValidatableObject
{
[Required]
public int Id { get; set; }
public string Name { get; set; }
public Category Category { get; set; } //enum
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (!Enum.IsDefined(typeof(Category), Category))
{
yield return new ValidationResult("Invalid Category", new[] { nameof(Category) });
}
}
}
在您的班级中,只有
Validate
方法具有逻辑,对于测试很有用。以下是如何设置的示例:
[TestCase(10_000)]
[TestCase(10_000_000)]
public void WhenInvalidCategory_ReturnsError(int category)
{
// Arrange
var settings = new Settings();
settings.Category = (Category)category;
// Act
var validationResults = settings.Validate(
new ValidationContext());
// Assert
Assert.IsNotEmpty(validationResults);
}
您只需根据
链接帖子调整
ValidationContext
的创建即可