我想对一个什么都不返回的方法进行单元测试。我正在使用xUnit。我在谷歌搜索,但我看到的方法都返回了一些东西。
这是我的代码:
我的班级:
public class ShopRepository : BaseRepository<ShopInformation>
{
public ShopRepository(IDbContext dbContext)
: base(dbContext)
{
}
public override void Update(ShopInformation entity)
{
if(GetAll().Any())
base.Update(entity);
else
base.Add(entity);
}
public ShopInformation ShopInformation()
{
return GetAll().FirstOrDefault();
}
}
我的测试:
[Fact]
public void GetAllTest()
{
var data = new List<ShopInformation>
{
new ShopInformation { Name = "BBB" },
new ShopInformation { Name = "ZZZ" },
new ShopInformation { Name = "AAA" },
}.AsQueryable();
var mockSet = Mock.Create<DbSet<ShopInformation>>();
Mock.Arrange(() => ((IEnumerable<ShopInformation>)mockSet).GetEnumerator()).Returns(data.GetEnumerator);
Mock.Arrange(() => ((IQueryable<ShopInformation>)mockSet).Provider).Returns(data.Provider);
Mock.Arrange(() => ((IQueryable<ShopInformation>)mockSet).Expression).Returns(data.Expression);
Mock.Arrange(() => ((IQueryable<ShopInformation>)mockSet).ElementType).Returns(data.ElementType);
Mock.Arrange(() => ((IQueryable<ShopInformation>)mockSet).GetEnumerator()).Returns(data.GetEnumerator());
var interDbContext = Mock.Create<IDbContext>();
interDbContext.Arrange(x => x.Set<ShopInformation>()).Returns(mockSet);
var companyRepository = new ShopRepository(interDbContext);
companyRepository.Update(new ShopInformation());
//???????????????
}
我需要测试Update
类的ShopRepository
方法,以确保调用base.Update(entity);
。但不明白如何做到这一点。
我正在使用:
答案 0 :(得分:0)
有两种可能的解决方案:
如果Update方法修改ShopRepository类中的任何值,则应对它们执行一些验证。
模拟base.Update方法返回&#34;期望&#34;并基于此断言。
答案 1 :(得分:0)
您的测试名为
GetAllTest()
,因此可能不应该测试Update()
函数。
这样做的最佳方法是返回bool,如果它已更新或未更新。
public bool Update(ShopInformation entity)
{
if(GetAll().Any())
{
base.Update(entity);
return true; // True because it updated
}
else
{
base.Add(entity);
return false; // False because it didn't
}
}
然后你的测试可以Assert
预期的答案。
// ... Setup test code
var hasUpdated = companyRepository.Update(new ShopInformation());
Assert.Equal(true, hasUpdated);
需要注意的一点:如果您使用的是存储库,则应该使用
Save
,因为这会更新所做的更改,但如果记录尚未更新,也会添加新记录存在。