- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想针对我的 Entity Framework (6.1.3) 数据模型使用 AutoFixture (3.30.8)。我已经实现了 AutoFixture.AutoEF (0.3.5) 包来帮助修复实体并避免由关系生成的循环引用。
但是,我的表有几个 int 列,它们在代码中由枚举表示,我希望能够根据枚举值设置 int 值,并为每个枚举值都有一个代理类。
这是我的架构的一个简化得多的示例:
public partial class MyContext : DbContext
{
public virtual DbSet<Parent> Parents { get; set; }
public virtual DbSet<Child> Children { get; set; }
}
public partial class Parent
{
public Parent()
{
this.Children = new HashSet<Child>();
}
public int Id { get; set; }
public string Name { get; set; }
public int Status { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public partial class Child
{
public int Id { get; set; }
public int ParentId { get; set; }
public string Name { get; set; }
public int Type { get; set; }
public virtual Parent Parent { get; set; }
}
这是我的枚举:
public enum Status
{
Active = 1,
Inactive = 2
}
public enum Type
{
Up = 1,
Down = 2,
Left = 3,
Right = 4
}
下面是我创建代理的方式:
var fixture = new Fixture();
fixture.Customize(new EntityCustomization(new DbContextEntityTypesProvider(typeof(MyContext))));
var parents = fixture.CreateMany<Parent>();
这是因为我有一个 3 个 Parent
类的集合,每个类都有 3 个 Child
类,并且 Id 属性很好地匹配。但是,正如预期的那样,Status
和 Type
属性是由 AutoFixture 生成的随机整数。
我想要的是 2 个 Parent
类,一个的 Status
为 1
,另一个为 Status
的 2
并且每个都有 4 个 Child
类,每个类都有 Type
的 1
、2
、3
和 4
。
这是否可以使用 AutoFixture 自动实现?
编辑:为了更清楚地说明我的问题:
我怎样才能自动将我的类的一个 int 属性映射到一个枚举,以便我为映射的枚举的每个值获得一个代理类。
这也需要在类具有 2 个或更多映射枚举的情况下工作。
例如如果 Child
具有 Type
和 Status
属性,我希望每个 Parent
有 8 个 Children
:
Status = 1, Type = 1
Status = 1, Type = 2
Status = 1, Type = 3
Status = 1, Type = 4
Status = 2, Type = 1
Status = 2, Type = 2
Status = 2, Type = 3
Status = 2, Type = 4
进一步推断,如果 Parent
也有 Status
和 Type
我希望有 8 个 Parent
代理类,每个类有 8 个 Child
代理类。
编辑 2:如果我将两个枚举都放在两个类上,这里是我手动编码的替代生成器的外观示例。通过使用 AutoFixture,我可以自动化除循环之外的所有内容以生成枚举的每个排列。 那就是我要问的怎么做。
public class Substitutes
{
private int parentIdSeed;
private int childIdSeed;
public Substitutes()
{
this.parentIdSeed = 0;
this.childIdSeed = 0;
this.Parents = new List<Parent>();
this.Children = new List<Child>();
this.GenerateParents();
}
private void GenerateParents()
{
foreach (Type type in Enum.GetValues(typeof(Type)))
{
foreach (Status status in Enum.GetValues(typeof(Status)))
{
this.parentIdSeed++;
var parent = new Parent { Id = this.parentIdSeed, Name = "Parent " + this.parentIdSeed, Status = (int)status, Type = (int)type };
this.GenerateChildren(parent);
this.Parents.Add(parent);
}
}
}
private void GenerateChildren(Parent parent)
{
foreach (Type type in Enum.GetValues(typeof(Type)))
{
foreach (Status status in Enum.GetValues(typeof(Status)))
{
this.childIdSeed++;
var child = new Child { Id = this.childIdSeed, Name = "Child " + this.childIdSeed, Status = (int)status, Type = (int)type, Parent = parent, ParentId = parent.Id };
parent.Children.Add(child);
this.Children.Add(child);
}
}
}
public List<Child> Children { get; set; }
public List<Parent> Parents { get; set; }
}
最佳答案
是的,这是可能的:
var parents = fixture.CreateMany<Parent>(2).ToList();
parents[1].Status = 1;
parents[1].Children = fixture.CreateMany<Child>(4).ToList();
parents[1].Children.ElementAt(1).Type = 1;
parents[1].Children.ElementAt(2).Type = 2;
parents[1].Children.ElementAt(3).Type = 3;
parents[1].Children.ElementAt(4).Type = 4;
parents[2].Status = 2;
parents[2].Children = fixture.CreateMany<Child>(4).ToList();
parents[2].Children.ElementAt(1).Type = 1;
parents[2].Children.ElementAt(2).Type = 2;
parents[2].Children.ElementAt(3).Type = 3;
parents[2].Children.ElementAt(4).Type = 4;
关于c# - 带有 Entity Framework 的 AutoFixture - 将 int 映射到枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31586964/
我刚刚更改了我的 [RegularExpression] 验证,我三分之一的单元测试失败了! 事实证明 AutoFixture 正在根据该正则表达式生成值,这很酷,但它不理解所有正则表达式,所以我想为
我使用 Autofixture 作为 SUT 工厂,但在卡住空实例时遇到困难。 我想做这样的事情: _fixture.Freeze(c => null); 但很快就意识到这是错误的。我已经用这个解决了
我想以不确定的方式自动生成方法的返回值,即每次调用/测试运行时,我都希望方法返回随机值。目前它总是返回方法调用的默认值: public interface IReturn {
给定这些类: public class DrumAndBassBand { public Drums Drum { get; set; } public Bass Bass { get
我正在将我的测试移植到 AutoFixture 2.0 ,而且我遇到了一些我既无法解释也无法解决的奇怪行为。这个简单的测试对我来说失败了: var autoFixtures = new Fixture
我正在研究一个相当嵌套的模型,它有一些循环引用。它还使用 Entity Framework ,因此所有列表都是 ICollection .为了适应这一点,我正在像这样配置 AutoFixture: _
我正在尝试使用 NSubstitute (1.8.2)、AutoFixture (3.33) 和 AutoFixture.AutoNSubstitute (3.33),如下所示: 我有一个 poco,
当我添加一个新的 TracingBehavior到自动夹具 Fixture实例使用 fixture.Behaviors.Add(new TracingBehavior()); 我在我的 R# 单元测试
我目前正在使用 EF Core Code First Approach,并且我有以下域类: public class Employee { // several properties such a
我刚刚开始使用 AutoFixture,我正在了解基础知识(从我所看到的还有更多),但我遇到了一个问题,我不能 100% 确定对于此类事情的最佳实践是什么。 我正在测试一个 Controller ,该
我在我的单元和集成测试中使用 AutoFixture 并遇到了问题。我正在生成数据传输对象,其中一些类在属性上具有 DataAnnotation 属性(其中一些是自定义的)。 AutoFixture
如何设置确定性测试以验证列表中的项目是否已排序? 首先,我执行以下操作: public void SyncListContainsSortedItems( [Frozen] SyncItem[
默认情况下,AutoFixture在“本地未指定时间”中创建DateTime结构。 我一直在尝试找到一种方法来配置它以创建具有UTC类型的DateTime结构,但是到目前为止没有成功。 有没有办法做到
是否可以在卡住后解冻对象类型? 如果我有一个使用 DateTime 的对象 Appointment,有没有办法做这样的事情? var time = fixture.Freeze(); IEnumera
有什么办法可以给 AutoFixture 一个对象的实例,让它通过所有的 setter 并设置随机数据? wiki 示例仅显示如何从 AutoFixture 获取实例,例如 var autoGener
在我使用 AutoFixture 之前的日子里,我可能做了以下安排来设置名为 CustomerService 的服务的单元测试: public void TestName() { //Arrang
我正在尝试编写这个简单的测试: var fixture = new Fixture().Customize(new AutoMoqCustomization()); var postProcessin
我正在尝试使用 SUT Factory “模式”来创建我的 SUT。 给定 SUT 结构: namespace MySut { public class Dep1 { }
我正在使用的域模型有很多循环引用。事实上,可以从图中的任何点到达大多数对象。许多这些循环引用也在集合中。所以一个 Booking将收藏 Students其中有 Courses 的集合其中有 Booki
我遇到了这个错误。 Ploeh.AutoFixture.Kernel.IllegalRequestException : A request for an IntPtr was detected. T
我是一名优秀的程序员,十分优秀!