使用访问器进行C#单元测试 - 构造函数不起作用

val*_*lov 0 .net c# wpf unit-testing accessor

我必须在我的应用程序中编写单元测试,但我遇到了问题.我正在使用C#和.NET 4.在我的测试中,我无法访问类的私有属性和方法,所以我在单元测试中为每个类使用自动生成的Accessors但是......

我的Accessor类的构造函数不接受它们的参数.例:

class SearchControl(bool isLogged, MainWindow mainWindow);
class MainWindow();
Run Code Online (Sandbox Code Playgroud)

要创建SearchControl类型的对象,您需要传递mainWindow对象.因此,如果我用Accessor类创建它,我无法访问私有方法和属性,我无法测试它们.

MainWindow mainWindow = new MainWindow();
SearchControl serchControl = new SearchControl(false, mainWindow);
Run Code Online (Sandbox Code Playgroud)

我必须使用Accessor clasees,但是当我这样做时,我的代码用红色加下划线,Visual Studio说不能接受参数.为什么,当我传递相同类型的参数时.如果我再次将MainClass对象传递给SearchControl_Accessor对象,我无法访问MainClass中的propeerties.所以带有访问器的代码如下所示:

MainWindow_Accessor mainWindow = new MainWindiow_Accessor();
SearchControl_Accessor searchControl = new SearchControl_Accessor(false, mainWindow);
Run Code Online (Sandbox Code Playgroud)

任何人都知道什么是错的,我必须做些什么来解决它.谢谢 :)

Kon*_*ski 5

如果你必须对私有方法进行单元测试,那么类设计可能很难开始?我(有点虚弱,我承认)理解是"外部世界"不应该关心对象的私有方法 - 只是它是否正确地写在框中.私有方法不是"合同"的一部分 - 它们的实现,返回类型等都可以改变,公共API是重要的.

在私有方法失败的情况下,您的对象的公共方法可以在什么情况下通过测试?如果可能的话,那么:

  • 公共方法未经过适当测试,或
  • 私有方法无关紧要 - 它们不会影响对象的行为方式,因此不需要进行测试.

或者它是不可能的,但是你想测试私有方法以确定哪一个导致某些公共方法出乎意料地行为?

如果是这种情况,它可能表明:

  • 那些公共方法应该更小(做得更少,并且由于这不会让你完全不知道哪种私人方法可能有罪),加上
  • 一个好主意是当他们依赖的私有方法行为异常时抛出特定的例外.然后,您测试这些异常的公共方法.