gpt4 book ai didi

testing - 不明白行为测试的目的

转载 作者:行者123 更新时间:2023-11-28 20:58:19 27 4
gpt4 key购买 nike

我希望有人能帮助我看到这些测试的真正值(value),因为我阅读了很多关于它们的资料,甚至在最近的项目中与它们合作过。但我从未真正看到测试的真正值(value)。当然,我可以理解为什么要编写它们,并了解它们如何发挥作用。但似乎这些类型的测试几乎没有投资返回率。这是我们代码库中某个类的示例:

class ServiceObject : IServiceObject
{
Dependency _dependency;

ServiceObject(Dependency dependency)
{
this._dependency = dependency
}

bool SomeMethod()
{
dependency.SomePublicMethod();
}
}

然后在我们的行为测试中,我们会像这样编写测试(伪代码):

void ServiceObject_SomeMethod_Uses_Dependency_SomePublicMethod()
{
create mock of IServiceObject;
stub out dependency object
add expectation of call to dependency.SomePublicMethod for IServiceObject.SomeMethod

call mockserviceobject.SomeMethod

check whether expectation was satisfied
}

显然缺少一些细节,但如果您熟悉此类测试,您就会明白。

所以我的问题实际上源于这样一个事实,即我看不到了解我的 ServiceObject 调用依赖项方法有何值(value)。我理解其背后的原因,因为您想确保该方法的逻辑达到了它应该达到的目的。但我看不出这是一种可持续的测试模式吗?

我编写了逻辑并且知道代码应该如何工作,所以为什么在我测试一次以确保它可以工作之后它会发生变化?现在您可以说,如果您在团队环境中工作,您可能希望确保没有人出现并更改代码以致意外跳过依赖项,因此希望确保他们知道它。但是,如果它出于正当理由被跳过怎么办。那么整个测试以及可能任何其他测试都必须被废弃。

无论如何,我只是希望有人能够揭示这些类型测试的真正潜力。

最佳答案

目标是孤立地测试类,真正地对其进行单元测试。验证它是否完全履行了职责。

在这种情况下,代码相当简单。当处理路径中存在条件性时,将参数传递给依赖项并对依赖项的结果进行处理时,这种测试的值(value)可能会变得更加清晰。

例如,假设一个方法是这样的:

bool someMethod(int paramX, int param Y ){

if ( (paramX / paramY) > 5 ){
return dependency.doOneThing(paramX);
} else {
return dependency.doSomethingElse(paramY);
}

}

现在我们有很多测试要写,我认为值(value)变得更加明显。特别是当我们编写一个将 paramY 设置为零的测试时。

关于testing - 不明白行为测试的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3403910/

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