【发布时间】:2021-07-03 10:55:36
【问题描述】:
为什么我的预期和实际结果相同,但测试失败?
这是我的测试课:
private readonly Mock<IMongoDbContext> _moqIMongoDbContext;
private readonly JobStore _jobStore;
public JobStoreTest()
{
_moqIMongoDbContext = new Mock<IMongoDbContext>();
_jobStore = new JobStore(_moqIMongoDbContext.Object, new Validator.Validator());
_moqIMongoDbContext
.Setup(_ => _.Jobs.InsertOneAsync(
It.IsAny<Job>(),
It.IsAny<InsertOneOptions>(),
It.IsAny<CancellationToken>())
)
.Returns((Job y, InsertOneOptions options, CancellationToken token)
=> Task.FromResult(y));
}
[Theory]
[ClassData(typeof(JobClassesForTesting))]
public async Task CreateAsync(IJob job, ValidationResult expectedValidationResult)
{
//Act
ValidationResult validationResult = await _jobStore.ValidateCreateAsync(job);
//Assert
Assert.Equal(expectedValidationResult, validationResult);
}
这是我的场景(JobClassesForTesting):
public class JobClassesForTesting : IEnumerable<object[]>
{
public IEnumerator<object[]> GetEnumerator()
{
var valid = new ValidationResult()
{
ValidationResultEnum = ValidationResultEnum.Valid,
ValidationResultMessageEnum = ValidationResultMessageEnum.NotNullFound
};
var invalid = new ValidationResult()
{
ValidationResultEnum = ValidationResultEnum.Invalid,
ValidationResultMessageEnum = ValidationResultMessageEnum.NullProperty
};
yield return new object[] {
new Job() {
Payload = null,
EntityName = "EntityNameTest1",
Module = "ModuleTest1",
},
invalid
};
yield return new object[] {
new Job() {
Payload = "PayloadTest2",
EntityName = "EntityNameTest2",
Module = "ModuleTest2",
},
valid
};
yield return new object[] {
new Job() {
Payload = "PayloadTest3",
EntityName = "EntityNameTest3",
Module = "ModuleTest3",
},
valid
};
}
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
虽然我的实际结果和预期结果相同,但测试失败。 我在下面添加了一张 xUnit 测试结果的图片。 这是我的错误:
ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
【问题讨论】:
-
这不是数组的比较方式。数组相等性测试它是否是完全相同的数组,而不是内容是否完全相同的形状。您想比较数组中对象的值,因此您需要为您的 Job 对象使用自定义比较器,或者遍历 Job 并比较这些值。
-
@maembe 我想检查 Job 的属性之一是否为空
-
ValidationResult是你写的吗?如果是这样,是class还是struct? -
是的,我写了,这是一门课@JoshuaRobinson
标签: c# unit-testing asp.net-core xunit