2015-11-07 40 views
0

我想編寫一些單元測試以確保我的域名空間和我的接口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(); 
} 

...這是我開始遇到問題。理想情況下,我想斷言classesInDomainNamespaceentitiesInUnitOfWork中的記錄數是相同的,但是在處理泛型時會出現奇怪現象。

我該如何寫這個單元測試?

回答

1

這會幫助?:

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。甚至沒有編譯 - 但我希望它給出了正確的提示。

+0

這似乎有竅門!謝謝! –