测试一个声明为友元(内部)的类的单元测试

8
在我的测试助手代码中,我有一个名为FakeDbSet(Of T)IDbSet(Of T)实现,模拟了许多EF行为而没有真正的数据库。 我声明该类为Friend,因为我希望强制所有代码与其交互,就像一个IDbSet(Of T)一样。 在我的Testing程序集内部,我可以访问该类的许多公共成员,我想对它们进行测试。
问题是,我将单元测试保存在一个名为Test.Unit的独立程序集中,这意味着它们无法访问我的内部实现! 我知道可以使用反射来解决这个问题,但是这会很快变得繁琐和混乱。 是否有任何更好的方法来设置我的项目以避免这个问题?
1个回答

8

我对.NET中的单元测试还很陌生 - 但这里不是存在一种内在的矛盾吗?一方面,我被鼓励尽可能将许多东西设置为Friend范围。以减少可见性。另一方面,我就不能为那些类创建任何单元测试,因为测试项目无法看到那些Friend类。我感到困惑。 - Prof. Falken
@Prof.Falken,测试的重点应该放在模块暴露出来的行为上。 - Tomas Jansson
没有异议 - 但我认为,将类视为某种“模块”是相当普遍的。然而,内部方法可以在共享同一项目或其他内容的类之间使用。但由于单元测试通常位于同一程序集中的另一个项目中,它们无法访问内部方法。这感觉最好很尴尬。 - Prof. Falken
1
@Prof.Falken,啊,我明白你的意思了。是的,这确实很尴尬,因此我倾向于不使用“internal”。我认为一个类应该尽可能保持私有,并仅暴露需要暴露的内容。如果有一个需要测试的“私有”算法,我会将其提取到自己的类中并使该算法公开。 - Tomas Jansson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接