gpt4 book ai didi

java - 测试工厂行为

转载 作者:行者123 更新时间:2023-12-01 15:17:45 25 4
gpt4 key购买 nike

我想知道测试工厂行为代码的最佳实践是什么。就我而言,工厂创建了一些依赖项实例,这些实例将传递给 FooBar 实例的构造函数。

public class FooBarFactory {
private Dependency1 dependency1;
private Dependency2Factory factory;

public FooBarFactory(Dependency1 dependency1, Dependency2Factory factory) {
this.dependency1 = dependency1;
this.factory = factory;
 }

public FooBar create() {
return new FooBar(dependency1, factory.create(), new Dependency3());
}
}

依赖项可以由其他一些工厂创建,也可以由被测工厂直接创建。

为了测试工厂行为,我现在要做的是在 FooBar 中创建一些 protected getter 来检索依赖项,以便我可以断言构造函数注入(inject)并且依赖项已正确创建。

这是我不确定的地方。出于测试目的添加一些 setter/getter 让我有点烦恼,因为这会破坏封装。我还可以使用反射来检索字段值,但我通常认为这种做法不好,因为它很容易被破坏。

任何人都可以提供有关此问题的见解吗?

最佳答案

一种解决方案是模拟 FooBar 类并验证创建 FooBarFactory#create() 返回的实例的构造函数调用。使用 JMockit 模拟 API,这样的测试将如下所示:

public class FooBarFactoryTest
{
@Injectable Dependency1 dep1;
@Injectable Dependency2 dep2;
@Cascading @Injectable Dependency2Factory dep2Factory;
@Mocked FooBar mockFooBar;
@Tested factory;

@Test
public void createFooBarWithProperDependencies()
{
assertNotNull(factory.create());

new Verifications() {{ new FooBar(dep1, dep2, (Dependency3) withNotNull()); }};
}
}

关于java - 测试工厂行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com