关于在接口中寻找泛型的单元测试的思考
Reflections on a unit test looking for generics in an interface
我想编写一些单元测试以确保我的域名称空间和我的 IUnitOfWork
界面正确同步。
例如,如果我有一个 Foo
的域实体,我的 IUnitOfWork 接口中应该有一个对应的 属性 类型的 IQueryable。所以如果我有:
namespace My.Domain
{
public class Foo : IEntity<Guid>
{
//properties
}
}
namespace My.Interfaces
{
public interface IUnitOfWork
{
public IQueryable<Foo> Foos { get; }
}
}
我是这样开始单元测试的:
private static readonly Assembly _assembly = typeof(Assembly.Class).Assembly;
[TestMethod]
public void AllEntitiesInNamespaceHaveCorrespondingIUnitOfWorkProperties()
{
var classesInDomainNamespace = _assembly.GetTypes()
.Where(x => string.Equals(x.Namespace, "My.Domain", StringComparison.Ordinal))
.Distinct();
var entitiesInUnitOfWork = typeof(IUnitOfWork).GetProperties()
.Where(x => x.PropertyType.IsAssignableFrom(typeof(IQueryable<IEntity<Guid>>)))
.Distinct();
}
...这就是我开始 运行 遇到问题的地方。理想情况下,我想断言 classesInDomainNamespace
和 entitiesInUnitOfWork
中的记录数相同,但是在处理泛型时事情变得很奇怪。
我将如何编写这个单元测试?
这有帮助吗?:
var entitiesInUnitOfWork = typeof(IUnitOfWork).GetProperties()
.Where(x =>
x.PropertyType.IsGenericType &&
x.PropertyType.GetGenericTypeDefinition() == typeof(IQueryable<>) &&
typeof(IEntity<Guid>).IsAssignableFrom(x.PropertyType.GetGenericArguments()[0])
.Distinct();
这不是testet。甚至没有编译 - 但我希望它能给出正确的提示。
我想编写一些单元测试以确保我的域名称空间和我的 IUnitOfWork
界面正确同步。
例如,如果我有一个 Foo
的域实体,我的 IUnitOfWork 接口中应该有一个对应的 属性 类型的 IQueryable。所以如果我有:
namespace My.Domain
{
public class Foo : IEntity<Guid>
{
//properties
}
}
namespace My.Interfaces
{
public interface IUnitOfWork
{
public IQueryable<Foo> Foos { get; }
}
}
我是这样开始单元测试的:
private static readonly Assembly _assembly = typeof(Assembly.Class).Assembly;
[TestMethod]
public void AllEntitiesInNamespaceHaveCorrespondingIUnitOfWorkProperties()
{
var classesInDomainNamespace = _assembly.GetTypes()
.Where(x => string.Equals(x.Namespace, "My.Domain", StringComparison.Ordinal))
.Distinct();
var entitiesInUnitOfWork = typeof(IUnitOfWork).GetProperties()
.Where(x => x.PropertyType.IsAssignableFrom(typeof(IQueryable<IEntity<Guid>>)))
.Distinct();
}
...这就是我开始 运行 遇到问题的地方。理想情况下,我想断言 classesInDomainNamespace
和 entitiesInUnitOfWork
中的记录数相同,但是在处理泛型时事情变得很奇怪。
我将如何编写这个单元测试?
这有帮助吗?:
var entitiesInUnitOfWork = typeof(IUnitOfWork).GetProperties()
.Where(x =>
x.PropertyType.IsGenericType &&
x.PropertyType.GetGenericTypeDefinition() == typeof(IQueryable<>) &&
typeof(IEntity<Guid>).IsAssignableFrom(x.PropertyType.GetGenericArguments()[0])
.Distinct();
这不是testet。甚至没有编译 - 但我希望它能给出正确的提示。