C# 单元测试-在测试类中将枚举作为方法参数传递
我有一门课叫游戏。我想知道在这种情况下,将游戏类中的枚举作为方法中的参数传递给测试类的最佳实践是什么 游戏类具有以下功能:C# 单元测试-在测试类中将枚举作为方法参数传递,c#,.net,unit-testing,nunit,C#,.net,Unit Testing,Nunit,我有一门课叫游戏。我想知道在这种情况下,将游戏类中的枚举作为方法中的参数传递给测试类的最佳实践是什么 游戏类具有以下功能: public enum Result { Zero, One, etc... } public int ResultCount(Result result) { switch(result) { case Result.Zero return 0; case Result.One retun 1;
public enum Result
{
Zero,
One,
etc...
}
public int ResultCount(Result result)
{
switch(result)
{
case Result.Zero
return 0;
case Result.One
retun 1;
etc...
}
}
public void CurrentResult(Result hometeam, Result awayteam)
{
setHomeTeamGoals(hometeam);
setAwayTeamGoals(awayteam);
}
然后我有一个单元测试类,我想在其中设置结果
[TestFixture]
public class Result_is_1_1
{
private Game _game;
[SetUp]
public void SetUp()
{
_game = new Game();
_game.CurrentResult(Result.One, Result.One);
}
当我使用下面的
using static unitTest.Game;
但我不确定这是否是错误的做法/快速修复等
推荐的方法是什么?是的,对测试中的类使用static通常意味着测试设计不好。如果你想让你的测试是独立的,就像单元测试的惯例一样,通过在你的设置方法中实例化它,为每个测试创建一个新的游戏——就像你现在做的那样 如果您想在同一个游戏中按顺序执行多个步骤,通常的方法是在测试本身中执行这些步骤 如果您希望每个测试方法实际上都是按特定顺序执行的一个步骤,那么您就不再进行通常认为的单元测试,而是进行不同类型的测试。你也在逃避NUnit最擅长的东西
但是,如果您确实想要,您可以在
[OneTimeSetUp]
方法中创建游戏,并使用OrderAttribute
命令所有测试,以便按顺序运行它们。这使得您的测试有些脆弱,因为每个测试都依赖于在它之前运行的所有测试。是的,为您的被测类使用static通常是一种表明测试设计糟糕的气味。如果你想让你的测试是独立的,就像单元测试的惯例一样,通过在你的设置方法中实例化它,为每个测试创建一个新的游戏——就像你现在做的那样
如果您想在同一个游戏中按顺序执行多个步骤,通常的方法是在测试本身中执行这些步骤
如果您希望每个测试方法实际上都是按特定顺序执行的一个步骤,那么您就不再进行通常认为的单元测试,而是进行不同类型的测试。你也在逃避NUnit最擅长的东西
但是,如果您确实想要,您可以在
[OneTimeSetUp]
方法中创建游戏,并使用OrderAttribute
命令所有测试,以便按顺序运行它们。这使得您的测试有些脆弱,因为每个测试都依赖于之前运行的所有测试。您很难回答您的问题,因为您没有提供完整/有效的代码。但是我猜您将Result
定义为Game
类中的嵌套枚举,这会引起一些混淆
因此,我假设您的游戏
类如下所示:
公共类游戏
{
公共枚举结果
{
零,,
一,,
}
//其他方法。。。
}
假设是这样,枚举的全名是Game.Result
,因为Result
是在Game
中定义的
因此,当您想要引用单元测试(或任何其他类)中的结果枚举时,您有两个选项
选项1,参考游戏。结果
(无使用静态
要求):
\u game.CurrentResult(game.Result.One,game.Result.One);
选项2,使用静态的语句,就像您所做的那样:
使用静态unitTest.Game;
// ...
_游戏当前结果(结果1,结果1);
(第三个选项是,您可以在游戏
类之外定义结果
枚举。这样您就不必担心选项1或2了。)
假设我正确理解了你的问题,那么这不是一个糟糕的测试实践。事实上,它与测试根本没有任何关系。这只是一种语言特征。就个人而言,我更喜欢使用全名游戏.Result
,而不是使用静态的语句。很难回答您的问题,因为您没有提供完整的/有效的代码。但是我猜您将Result
定义为Game
类中的嵌套枚举,这会引起一些混淆
因此,我假设您的游戏
类如下所示:
公共类游戏
{
公共枚举结果
{
零,,
一,,
}
//其他方法。。。
}
假设是这样,枚举的全名是Game.Result
,因为Result
是在Game
中定义的
因此,当您想要引用单元测试(或任何其他类)中的结果枚举时,您有两个选项
选项1,参考游戏。结果
(无使用静态
要求):
\u game.CurrentResult(game.Result.One,game.Result.One);
选项2,使用静态的语句,就像您所做的那样:
使用静态unitTest.Game;
// ...
_游戏当前结果(结果1,结果1);
(第三个选项是,您可以在游戏
类之外定义结果
枚举。这样您就不必担心选项1或2了。)
假设我正确理解了你的问题,那么这不是一个糟糕的测试实践。事实上,它与测试根本没有任何关系。这只是一种语言特征。就我个人而言,我更喜欢使用全名游戏。结果,而不是使用使用static
语句。您是否特别询问使用static
的用法?如果是这样的话,是什么促使您首先使用它的?您是否特别询问使用静态的?如果是这样的话,是什么让你首先使用它的?这正是我想要的答案。谢谢正是我想要的答案