3

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

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

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

但是,如果我想进行单元测试,我看不到测试这些类的方法。所以我的问题是什么是最佳实践?纯粹为了单元测试而不得不公开它们似乎是一种耻辱..还是有更好的工具来完成这项工作?

在尽可能多地封装和公开尽可能多的方法以允许它们全部被测试之间似乎是一种权衡——当然最好是单元测试来测试内部工作并让集成测试来测试公共接口?

--

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

4

2 回答 2

5

我不会讨论测试内部类是否有意义,但是你想要的可以使用InternalsVisibleTo属性来实现

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

[assembly:InternalsVisibleTo("MyTest")]

并且所有内部类都可以从MyTest.dll

于 2013-08-16T14:09:26.077 回答
0

也许我误解了你的情况,或者是什么单元测试它。带着一丝疑问阅读。另外,请用评论指导我确切的问题是什么。

测试 API 绝不是单元测试——它被称为系统测试

单元测试一次采用一个单元,例如一个类,并对其环境进行建模。然后断言它的行为正确。对于您的私人课程,“环境”是图书馆的其余部分。

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

这个人解释得比我好。

于 2013-08-19T09:33:34.687 回答