如何使用moq生成假数据进行单元测试?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用moq生成假数据进行单元测试?相关的知识,希望对你有一定的参考价值。
我需要生成一些数据来对我的存储库进行单元测试。我正在使用循环生成对象列表,请参阅下面的代码。我学会了moq是一个很棒的模拟库,我可以使用moq生成它,我该怎么做?
public IQueryable<Category> GetCategories()
{
IList<Category> result = new List<Category>();
for (int i = 1; i <= 2; i++)
{
Category c = new Category();
c.ID = i;
c.Name = "Parent" + i.ToString();
c.ParentID = 0;
for (int x = i*10; x < i*10+5; x++)
{
Category sub = new Category();
sub.ID = x;
sub.Name = "Sub" + x.ToString();
sub.ParentID = i;
result.Add(sub);
}
result.Add(c);
}
return result.AsQueryable<Category>();
}
答案
你不能使用Moq来创建数据,但你可以使用AutoFixture
:
public IQueryable<Category> GetCategories()
{
return fixture.CreateMany<Category>().AsQueryable();
}
但是,这不会为您提供分层树。它将返回如下对象:
Object 1:
- ID = 0
- ParentID = 1
Object 2:
- ID = 2
- ParentID = 3
等等
如果您确实需要具有此分层数据,则需要使用以下代码:
public IQueryable<Category> GetCategories()
{
var result = new List<Category>();
// Create the parents
var parents = fixture.Build<Category>()
.Without(x => x.ParentID)
.CreateMany());
result.AddRange(parents);
result.AddRange(parents.SelectMany(p => fixture.Build<Category>()
.With(x => x.ParentID, p.ID)
.CreateMany()));
return result.AsQueryable();
}
这将为每个父项添加多个父项,其中包含多个子项。
另一答案
您可以使用faker.net生成虚假数据。例如:对于dotnet核心项目,它的Faker.NETCore。
dotnet add package Faker.NETCore -v 1.0.1
然后以下列方式在代码中使用相同的代码: -
public void GetStudent()
{
var st = new Student()
st.FirstName = Faker.Name.First();
st.LastName = Faker.Name.Last();
st.Mobile = Faker.Phone.Number();
}
以上是关于如何使用moq生成假数据进行单元测试?的主要内容,如果未能解决你的问题,请参考以下文章