gpt4 book ai didi

java - 如何为一组方法编写单元测试,其中每个方法都依赖于其他方法?

转载 作者:行者123 更新时间:2023-11-30 09:24:48 25 4
gpt4 key购买 nike

我是编写单元测试的新手,在为以下场景编写测试用例时遇到了困难:

 Class A
{
public B createB(string name);
public B getB(string name);
public void removeB(B instance);
}

Class B
{
public B(string name);
}

如果指定名称的B 实例已经存在,方法createB() 将返回null。因此,为了测试 createB() 是否成功完成,我必须调用 getB() 检查它是否存在,然后调用 removeB()删除它:

 A a = getInstanceOfA();
public void testCreateB()
{
B b = a.getB("B");
if (b != null)
{
a.removeB(b);
}
assertNotNull(a.createB("B"));
}

这违反了“一个测试用例必须只有一个原因失败”的规则,如果测试失败,我不知道问题出在哪里。测试getB()方法也是一样,必须调用createB()作为开始测试的先决条件。我正在使用 JUnit,每次开始测试时测试用例都会被打乱。在这种情况下,是否有任何最佳实践来确保测试用例的隔离?

请注意,getInstanceOfA() 方法是另一个库提供的 API 调用,获取 A 的“干净”实例是不可控的。

最佳答案

您需要将您的程序置于字符串“B”的已知状态,使用“B”调用 c​​reateB 方法并检查结果是否符合您的预期。然后你再做一次,有不同的状态和不同的预期结果。像这样:

public void testCreateBSucess() {
A a = getInstanceOfA(); // Make sure "B" doesn't exists
B b = a.createB("B");
assertNotNull(b);
}

public void testCreateBFail() {
A a = getInstanceOfA();
a.createB("B"); // Making sure "B" exists
B b = a.createB("B");
assertNull(b);
}

关于java - 如何为一组方法编写单元测试,其中每个方法都依赖于其他方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15514597/

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