我一直在努力争取这个,希望它会帮助别人.
虽然创建使用MSTEST单元测试我发现我在每个测试重复相同的码,并发现了几个方便的属性(的TestInitialize,TestCleanup,ClassInitialize,和ClassCleanup).
据推测,当您使用这些属性之一标记方法时,它应该自动执行(在每次测试之前,在每次测试之后,在所有测试之前,以及在所有测试之后).令人沮丧的是,这没有发生,我的测试失败了.如果从标有TestMethodattribute 的类中直接调用这些方法,则测试成功.显然他们不是自己执行的.
以下是我使用的一些示例代码:
[TestInitialize()]
private void Setup()
{
_factory = new Factory();
_factory.Start();
}
Run Code Online (Sandbox Code Playgroud)
那为什么不执行?
在我的域中,每个域实体可能有许多值对象。我创建了价值对象来表示金钱、重量、数量、长度、体积、百分比等。
这些值对象中的每一个都包含一个数值和一个度量单位。例如 money 包含货币价值和货币 ($, euro,...) , weight 包含数值和重量单位(kilo, pound, ...)
在用户界面中,这些也并排显示:字段名称、其值后跟其随附单元,通常在属性面板中。域实体具有向 UI 公开的等效 DTO。
我一直在寻找将 DTO 内的值对象传输到 UI 的最佳方法。
我已经进行了深入搜索,但似乎没有其他问题可以完全解决这个问题。非常感谢任何建议!
编辑:在 UI 中,值和单位都可以更改并发送回域进行更新。
我有一个结构可能比类更可取的情况:
但是,我想添加一些只有get访问权限的属性,它们提供了上述3个bool的组合.例如,bools是"Same","Forward"和"Backward".属性将是"全部","无","单向","双向"等,这可以从前者3确定.
这些属性是否会增加堆栈上每个结构实例的大小,从而使类更合适?或者它不会影响选择?
我想InternalsVisibleTo仅使用该属性来进行有意义的单元测试.
但是,我担心当我构建发布时,internal成员不会被混淆,即使没有朋友程序集将成为发布版本的一部分.
有什么我可以/需要做的事情会导致这些internal成员真正被认为internal是发布版本吗?在网上找不到明确的答案.
仅供参考:我还没有选择特定的混淆器.这个问题的任何答案都可能影响这个选择.
我正在尝试应用唯一的复合约束,约束的一部分是外键。我似乎让它工作的唯一方法是在我的域类中显式定义外键,这是我想避免的。这可能吗?
该问题和解决方法适用于HasAlternateKey和HasIndex。该解决方案构建良好,但在创建迁移时会忽略约束,直到影子属性转换为域类中的真实属性。
这不起作用(迁移会忽略这一点):
entity.HasAlternateKey(e => new { e.Header.Id, e.Version, e.StartDate });
Run Code Online (Sandbox Code Playgroud)
将影子属性 HeaderID 转换为真实属性后,这确实有效:
entity.HasAlternateKey(e => new { e.HeaderId, e.Version, e.StartDate });
entity.HasOne(e => e.Header).WithMany().HasForeignKey(f => f.HeaderId);
Run Code Online (Sandbox Code Playgroud) c# ×5
dto ×1
ef-core-2.2 ×1
entity-framework-migrations ×1
get ×1
mstest ×1
obfuscation ×1
properties ×1
size ×1
struct ×1