c#中单元测试时的问题



我有一个类库项目,它将被一些遗留代码和一些现代化代码所消耗。我想简单地说明一下我所面临的问题。

class ClasslibraryService
{
private Dependency1 _dependency1;
private Dependency2 _dependency2
public  ClasslibraryService(Dependency1 dependency)
{
_dependency1 = dependency;
// this dependency2 could be something like logger or Bearer token service which I do not want to expose to consuming application
_dependency2 = new Dependency2(new Dependency3());
}
public int DoSomeOperation()
{
var res = _dependency2.DoSomething();
return _dependency1.DoSomeOperation(res);
}
} 

所以基本上我必须在构造函数内新建,而不用使用构造函数注入依赖。

现在,在对这个类进行单元测试时,我创建了另一个构造函数,它通过构造函数获取所有依赖项。

但是这里的问题是

  1. 我知道我通过创建另一个构造函数违反了单元测试的主要目标。实际代码将不会使用此构造函数。但是我也找不到其他的方法!!
  2. 如果1不是正确的解决方案,请建议我一个解决方案

TIA

我知道我通过创建违反了单元测试的主要目标另一个构造函数。实际代码将不会使用此构造函数。但是我也找不到其他的方法!!

我知道这对一些人来说是异端邪说,但我相信在软件开发中没有硬性规定。这是一个权衡的游戏。如果更改构造函数的工作方式代价太大,那么现在可以这样做:

public  ClasslibraryService(Dependency1 dependency1, Dependency2 dependency2 = null)
{
_dependency1 = dependency1;
_dependency2 = dependency2 ?? new Dependency2(new Dependency3());
}

这为实际代码引入了一个默认实现,可以在单元测试中重写。然后,您可以稍后重新访问此代码并使其更纯粹。

最新更新