隐藏课程 - 但无法进行单元测试

时间:2013-08-16 14:00:14

标签: c# oop unit-testing

我正在使用Visual Studio 2010在C#中编写一个项目,但希望使用NUnit进行单元测试。

我对oop很新,但试图尽可能地隐藏信息,只暴露所需的最少接口。这意味着我有几个完全在库内部的类 - 它们可以处理一些内部状态,而用户只需要知道几个提供接口的公共类。

这似乎尽可能地隐藏,为用户提供了一个最小的界面。

但是,如果我想进行单元测试,我看不到测试这些类的方法。所以我的问题是什么是最佳做法?纯粹为了单元测试而不得不暴露它们似乎是一种耻辱......或者是否有更好的工具可用于工作?

似乎在尽可能多地封装和暴露尽可能多的方法之间进行权衡以允许对它们进行全部测试 - 当然,最好是单元测试来测试内部工作并让集成测试测试公共接口?

-

我意识到通常情况下,你只会担心单元测试公共接口,但在这种情况下会导致很多非常复杂的测试 - 将所有内容分解成小块来测试肯定会更好吗? / p>

2 个答案:

答案 0 :(得分:5)

我不会讨论是否有必要测试内部类,但是使用InternalsVisibleTo属性

可以实现您想要的内容

将以下内容添加到您的资料库:

[assembly:InternalsVisibleTo("MyTest")]

可以从MyTest.dll

访问所有内部类

答案 1 :(得分:0)

也许我误解你的情况,或者测试它的单位。仔细阅读。另外,请引导我注释确切的问题。

测试API绝不是单元测试 - 它被称为system test

单元测试采用单元,例如一个班级,一次一个,并模拟它的环境。然后断言它行为正常。对于您的私人课程,"环境"是图书馆的其余部分。

为了测试,不应公开私人数据。这就是原因。私有数据是特定于实现的。也就是说,数据格式应该能够自由更改,而不需要API类或单元测试的用户注意到。

This guy解释得比我好。