关于在界面中寻找泛型的单元测试的思考

时间:2015-11-07 04:17:05

标签: c# unit-testing reflection

我想编写一些单元测试,以确保我的域命名空间和我的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 个答案:

答案 0 :(得分:1)

这会有帮助吗?:

$map = array(
            0 => array('childen' => array())
        );

        foreach ($menus as &$menu) {
            $menu['children'] = array();
            $map[get_value($menu, 'id_menu')] = &$menu;
        }

        foreach ($menus as &$menu) {
            $map[get_value($menu, 'id_menu_parent')]['children'][] = &$menu;
        }

        return $map[0]['children'];

这不是testet。甚至没有编译 - 但我希望它给出正确的提示。