c#中单元测试的问题
Issues while Unit testing in c#
我有一个 class 库项目,它将被一些遗留代码和一些现代化代码使用。我想简单地展示一下我面临的问题。
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);
}
}
所以基本上我不得不在构造函数中 new up 而不是使用构造函数注入依赖项。
现在,在对 class 进行单元测试时,我创建了另一个构造函数,它通过构造函数获取所有依赖项。这工作正常。
但这里的问题是
- 我知道我通过创建另一个 constructor.Actual 代码违反了单元测试的主要 objective 将不使用此构造函数。但是我也找不到其他方法!!
- 如果 1 不是正确的解决方案,请给我一个解决方案
TIA
I know I am violating main objective of unit testing by creating
another constructor.Actual code will not be using this constructor.
But I could not find any other way too!!
我知道这对某些人来说是异端邪说,但我相信软件开发没有硬性规定。这是一个权衡的游戏。如果改变你的构造函数的工作方式太昂贵,你现在可以做这样的事情:
public ClasslibraryService(Dependency1 dependency1, Dependency2 dependency2 = null)
{
_dependency1 = dependency1;
_dependency2 = dependency2 ?? new Dependency2(new Dependency3());
}
这为实际代码引入了一个默认实现,可以在单元测试中覆盖它。然后您可以稍后重新访问此代码并使其更纯净。
我有一个 class 库项目,它将被一些遗留代码和一些现代化代码使用。我想简单地展示一下我面临的问题。
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);
}
}
所以基本上我不得不在构造函数中 new up 而不是使用构造函数注入依赖项。
现在,在对 class 进行单元测试时,我创建了另一个构造函数,它通过构造函数获取所有依赖项。这工作正常。
但这里的问题是
- 我知道我通过创建另一个 constructor.Actual 代码违反了单元测试的主要 objective 将不使用此构造函数。但是我也找不到其他方法!!
- 如果 1 不是正确的解决方案,请给我一个解决方案
TIA
I know I am violating main objective of unit testing by creating another constructor.Actual code will not be using this constructor. But I could not find any other way too!!
我知道这对某些人来说是异端邪说,但我相信软件开发没有硬性规定。这是一个权衡的游戏。如果改变你的构造函数的工作方式太昂贵,你现在可以做这样的事情:
public ClasslibraryService(Dependency1 dependency1, Dependency2 dependency2 = null)
{
_dependency1 = dependency1;
_dependency2 = dependency2 ?? new Dependency2(new Dependency3());
}
这为实际代码引入了一个默认实现,可以在单元测试中覆盖它。然后您可以稍后重新访问此代码并使其更纯净。