gpt4 book ai didi

unit-testing - 类方法应该接受参数还是使用类属性

转载 作者:行者123 更新时间:2023-12-04 18:53:37 24 4
gpt4 key购买 nike

考虑下面的类

public class Class1
{
public int A { get; set; }
public int B { get; set; }

public int GetComplexResult()
{
return A + B;
}
}

为了使用 GetComplexResult ,此类的使用者必须知道设置 AB在调用方法之前。如 GetComplexResult访问许多属性来计算其结果,如果消费者没有先设置所有适当的属性,这可能会导致错误的返回值。所以你可以这样写这个类
public class Class2
{
public int A { get; set; }
public int B { get; set; }

public int GetComplexResult(int a, int b)
{
return a + b;
}
}

这样一来,来电者 GetComplexResult强制传入所有需要的值,确保正确计算预期的返回值。但是如果有很多必需的值,参数列表也会增长,这似乎也不是一个好的设计。好像也突破了封装的点 A , BGetComplexResult在一个类(class)。我什至可能会想制作 GetComplexResult静态,因为它不需要类的实例来完成它的工作。我不想到处做一堆静态方法。

是否有术语来描述这两种创建类的不同方式?他们似乎都有优点和缺点 - 有什么我不理解的东西应该告诉我一种方式比另一种方式更好吗?单元测试如何影响这个选择?

最佳答案

如果你使用一个真实世界的例子,答案就会变得更清楚。

public class person
{
public string firstName { get; set; }
public string lastName { get; set; }

public string getFullName()
{
return firstName + " " + lastName;
}
}

实体对象的意义在于它包含有关实体的信息,并且可以执行实体需要执行的操作(基于其包含的信息)。所以是的,在某些情况下,某些操作无法正常工作,因为实体尚未完全初始化,但这并不是设计失败。如果在现实世界中,我向您询问尚未命名的新生儿的全名,那也会失败。

如果某些属性对于实体执行其工作至关重要,则可以在构造函数中初始化它们。另一种方法是使用一个 bool 值来检查实体是否处于可以调用给定方法的状态:
while (person.hasAnotherQuestion()) {
person.answerNextQuestion();
}

关于unit-testing - 类方法应该接受参数还是使用类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2389466/

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