非常简单的问题:我可以使用NBuilder创建x个随机字符串的集合吗?
我在努力......
// NOTE: Tags need to be lowercase.
return Builder<string>
.CreateListOfSize(10)
.WhereAll()
.Has(x => x = randomGenerator.Phrase(15))
.WhereTheFirst(1)
.Has(x => x = "time")
.AndTheNext(1)
.Has(x => x = "place")
.AndTheNext(1)
.Has(x => x = "colour")
.Build();
Run Code Online (Sandbox Code Playgroud)
但它是运行时错误,我需要调用一些特定的构造函数或其他东西.
有人有主意吗?
public class Business {
protected List<BusinessRulesDto> BusinessRules { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试过:
businessMockObject.Protected().SetupSet<List<BusinessRulesDto>>("BusinessRules", ItExpr.IsAny<List<BusinessRulesDto>>()).Verifiable();
Run Code Online (Sandbox Code Playgroud)var businessRulesDtoList = Builder<BusinessRulesDto>.CreateListOfSize(2).Build().ToList();
businessMockObject.Protected().SetupGet<List<BusinessRulesDto>>("BusinessRules").Returns(businessRulesDtoList);
businessMockObject.Protected().SetupSet<List<BusinessRulesDto>>("BusinessRules", ItExpr.IsAny<List<BusinessRulesDto>>()).Verifiable();
Run Code Online (Sandbox Code Playgroud)我尝试了很多事情,但都没有成功。我可以模拟受保护的方法,但不能模拟受保护的属性。
如何模拟受保护的属性?
我正在使用nBuilder填充对象图,但它仅填充值类型。我希望它填充引用类型(相关对象)。
我有一个类型,并希望用测试数据创建它的实例.
我知道像NBuilder或AutoFixture这样的框架可以创建在设计时(<T>)已知类型的实例.这些框架是否能够基于仅在runtime(Type)中已知的类型创建实例?
最后,我想做一些事情:
var value = Builder.Create(type);
var constant = Expression.Constant(value, type);
Run Code Online (Sandbox Code Playgroud) 鉴于以下课程:
class Department
{
public String Name { get; set; }
public IList<Employee> Employees { get; set; }
}
class Employee
{
public String Name { get; set; }
public String Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用NBuilder,我可以创建一个部门对象,并通过以下方式分配10名员工:
var employees = Builder<Employee>.CreateListOfSize(10).Build();
var department = Builder<Department>
.CreateNew()
.With(d=>d.Employees = employees)
.Build();
Run Code Online (Sandbox Code Playgroud)
这适用于少量的集合,但是对于大型集合来说它很麻烦.有没有办法让NBuilder自动填充对象中的所有集合?
顺便说一句,我没有绑定NBuilder,所以如果有另一个免费的图书馆这样做,我会非常乐意切换.
我在单元测试中尝试NBuilder.一个很棒的图书馆 但是,我无法解释类和接口的以下结构.
在FizzWare.NBuilder名称空间中
ISingleObjectBuilderSingleObjectBuilderExtensions在 FizzWare.NBuilder.Implementation
ObjectBuilderSingleObjectBuilderExtensions只是一个包装IObjectBuilder.
客户端代码通常应该使用一个名为的类,该类Builder具有一个静态方法ISingleObjectBuilder.您永远不需要在客户端代码中实例化任何类.
现在,我不明白了SingleObjectBuilderExtensions.它是否具有任何设计效益?ISingleObjectBuilder当两个接口在同一名称空间中时,为什么不直接使用这些方法.
我试图模仿这个列表:
private readonly IList<MyClass> myList = new List<MyClass>();
Run Code Online (Sandbox Code Playgroud)
使用这个(如看到这里):
IList<MyClass> mockList = Builder<MyClass>.CreateListOfSize(5).Build();
mockObj.SetupGet<IEnumerable<MyClass>>(o => o.myList).Returns(stakeHoldersList);
Run Code Online (Sandbox Code Playgroud)
但是在运行时我得到一个InvalidCastException:
Unable to cast object of type 'System.Collections.Generic.List`1[MyClass]' to
type 'System.Collections.ObjectModel.ReadOnlyCollection`1[MyClass]'.
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在尝试创建一些具有这样的层次结构的虚拟对象:
Post
|
----User
Run Code Online (Sandbox Code Playgroud)
很简单.
这是代码:
var user = Builder<User>.CreateNew().Build();
var posts = Builder<Post>.CreateListOfSize(100)
.All()
.With(x => x.User == user)
.Build();
Run Code Online (Sandbox Code Playgroud)
但是对于每个项目,post.User都是null.
有任何想法吗?