哪种方法更好:我试图在网上找到它,但我无法得到更好的答案。
1
public class OtherClass
{
public int Add(int x, int y)
{
return x + y;
}
}
public class TestClass
{
OtherClass oClass = new OtherClass();
public int Fun1()
{
return oClass.Add(1,2);
}
public int Fun2()
{
return oClass.Add(1, 2);
}
}
2
public class TestClass
{
public int Fun1()
{
OtherClass oClass = new OtherClass();
return oClass.Add(1, 2);
}
public int Fun2()
{
OtherClass oClass = new OtherClass();
return oClass.Add(1, 2);
}
}
答案 0 :(得分:2)
我认为这取决于你要测试的内容。
如果您正在测试在同一个类实例上执行的一系列函数的效果,那么您可能想要创建一个单独的实例(例如压力测试)
但是否则我会说在每个测试函数中创建类的新实例总是更好,以确保每个测试的上下文是可预测的。如果您的测试方法共享一个类的实例,并且一个测试方法失败并破坏了测试对象的状态,那么您的后续测试可能会失败,除了被测对象的状态被先前失败的测试损坏之外没有其他原因(可能看起来多个测试都失败了,实际上只有一个早期测试是真正的失败)。
答案 1 :(得分:0)
取决于场景,如果要在多个函数上共享类,并且创建该类的实例不需要特定的参数,那么最好是在类级别。
假设您经常使用 Fun1 和 Fun2 ,在方法上创建实例会产生实例创建开销而不是在类级别单个实例,或者更好的是,如果您确定它将在整个应用程序中成为单个实例,则将其设置为静态或使其成为单例。
在课堂级别使用它的一个好处是,如果你正在进行单元测试,你可以创建一个像 IOtherClass 这样的界面,并在 TestClass 的构造函数中注入它
它看起来像这样。
public class OtherClass : IOtherClass
{
public int Add(int x, int y)
{
return x + y;
}
}
public class TestClass
{
IOtherClass oClass;
public TestClass(IOtherClass _oClass)
{
oClass = _oClass;
}
public int Fun1()
{
return oClass.Add(1,2);
}
public int Fun2()
{
return oClass.Add(1, 2);
}
}
答案 2 :(得分:-1)
最好将它作为课程中的一个字段,而不是在每个方法中声明一个新字段。原因很简单,每个方法中都没有一行代码声明变量意味着如果声明语句发生变化,你只需要在一个地方改变它,而不是每个方法。此外,它将使您的代码更易于阅读和添加,因为这一行不会在任何地方重复。
请记住,如果需要处理该字段,您的类应该实现IDisposable接口。