如何使任何实例创建都是假的(FakeItEasy)?
How to make any instance creation a fake (FakeItEasy)?
我有这段代码要测试
class SearchEngine
{
public void Search()
{
var module = new SearchModule();
module.Search();
}
}
我已经简化了它,但我不能提供搜索模块实例作为函数 Search
的参数,也不能作为 class SearchEngine
.[=17= 的构造函数参数]
有没有办法确保 module
对象在我编写单元测试时是一个 fakeiteasy 假货?
我希望能够对模块对象进行一些 CallTo
验证,特别是当我们调用 Search()
时调用了 module.Search()
Is there a way to insure that the module object will be a fakeiteasy fake when I write my unit test?
不,这是不可能的,至少对于您的代码的当前形状而言是不可能的。 FakeItEasy 无法使用 new
.
拦截实例创建
如果你想伪造一些东西,它必须以某种方式提供给被测系统。 SUT 无法自行创建。
I cannot provide a searchmodule instance as a parameter of the function Search
, nor as a constructor parameter of the class SearchEngine
你能注入一个工厂吗?像这样:
public interface ISearchModuleFactory
{
SearchModule Create();
}
class SearchEngine
{
private readonly ISearchModuleFactory _searchModuleFactory;
public SearchEngine(ISearchModuleFactory searchModuleFactory)
{
_searchModuleFactory = searchModuleFactory;
}
public void Search()
{
var module = _searchModuleFactory.Create();
module.Search();
}
}
然后您可以像这样测试 SearchEngine:
// Arrange
var factory = A.Fake<ISearchModuleFactory>();
var module = A.Fake<SearchModule>();
A.CallTo(() => factory.Create()).Returns(module);
var searchEngine = new SearchEngine(factory);
// Act
searchEngine.Search();
// Assert
A.CallTo(() => module.Search()).MustHaveHappened();
我有这段代码要测试
class SearchEngine
{
public void Search()
{
var module = new SearchModule();
module.Search();
}
}
我已经简化了它,但我不能提供搜索模块实例作为函数 Search
的参数,也不能作为 class SearchEngine
.[=17= 的构造函数参数]
有没有办法确保 module
对象在我编写单元测试时是一个 fakeiteasy 假货?
我希望能够对模块对象进行一些 CallTo
验证,特别是当我们调用 Search()
module.Search()
Is there a way to insure that the module object will be a fakeiteasy fake when I write my unit test?
不,这是不可能的,至少对于您的代码的当前形状而言是不可能的。 FakeItEasy 无法使用 new
.
如果你想伪造一些东西,它必须以某种方式提供给被测系统。 SUT 无法自行创建。
I cannot provide a searchmodule instance as a parameter of the function
Search
, nor as a constructor parameter of the classSearchEngine
你能注入一个工厂吗?像这样:
public interface ISearchModuleFactory
{
SearchModule Create();
}
class SearchEngine
{
private readonly ISearchModuleFactory _searchModuleFactory;
public SearchEngine(ISearchModuleFactory searchModuleFactory)
{
_searchModuleFactory = searchModuleFactory;
}
public void Search()
{
var module = _searchModuleFactory.Create();
module.Search();
}
}
然后您可以像这样测试 SearchEngine:
// Arrange
var factory = A.Fake<ISearchModuleFactory>();
var module = A.Fake<SearchModule>();
A.CallTo(() => factory.Create()).Returns(module);
var searchEngine = new SearchEngine(factory);
// Act
searchEngine.Search();
// Assert
A.CallTo(() => module.Search()).MustHaveHappened();