2012-07-30 50 views
1

我有一个单独的类库,用于所有单元测试(使用nunit)。在测试项目中,我有一个帮助程序类为我创建测试对象。设置这些对象时,我需要设置一些我标记为内部的值。我这样做的原因是因为这些对象实际上是工作流程的一部分,所以我只能通过实际上经历工作流程来实现这些属性状态,这种方式杀死了单元测试的想法。当这些状态是内部属性时,如何使用单元测试创​​建测试状态?

例如,我首先测试的方法。它会检查是否进行了某项审批,如果确实通过,则会将其移至链中的下一个步骤(或者说,它会检查是否收到了下一个批准,以此类推)。如果不是,则将其重新分配给需要批准的人员。

因此,我所做的是创建一个处于这个过程的某个阶段的测试票据。例如,第一次测试运行第一批准人未批准的方法,并进行检查以确保将其重新分配给该人员。下一个测试将在批准者HAS批准的地方运行,并确保它在树上向下移动。

我明显面对的问题是测试类位于不同的命名空间,所以我不能击中内部属性。我不确定是否有这方面的解决方案,或者如果我错过了一些支持我进入这个角落的其他基础知识(设计气味?)。我意识到你通常只想为公共api编写测试,但是我的部分测试要求我对私有字段进行一些设置。

有什么建议吗?

+2

InternalsVisibleTo是快速解决方案 - 认为你是对的,这是一种设计气味。这听起来像也许改变到一个状态机或战略模式会更好的设计,但它听起来好像是边际。你必须在将来改变这一点,并可能需要引入新的步骤,然后改变**可能会值得。 – 2012-07-30 16:33:27

回答

3

您可以利用InternalsVisibleTo属性来指定您的UnitTest程序集可以访问该类的内部属性。

这使您的测试和'真正'组装紧密结合,但这应该会让您工作。