我正在VS 2017上为旧软件的新模块启动测试项目。我是TDD和单元测试的新手,所以我想知道这是否是正确的方法...
我首先测试如何将对象添加到viewmodel类的列表中:
[TestClass]
public class RTCM_Config_Test
{
static RTCM_Bouton input = new RTCM_Bouton();
static RTCM_Sortie output = new RTCM_Sortie();
[TestMethod]
public void CreateConfig()
{
//Arrange
//Act
RTCM_Config conf = new RTCM_Config();
//Assert
Assert.IsNotNull(conf);
}
[TestMethod]
public void AddNewInputInConfig()
{
//Arrange
RTCM_Config conf = new RTCM_Config();
//Act
bool isOk = conf.CreateElements(input);
//Assert
Assert.IsTrue(isOk);
}
[TestMethod]
public void AddNewOutputInConfig()
{
//Arrange
RTCM_Config conf = new RTCM_Config();
//Act
bool isOk = conf.CreateElements(output);
//Assert
Assert.IsTrue(isOk);
}
}
视图模型中的CreateElements函数:
public bool CreateElements(RTCM_Bouton btn)
{
if (listButtonsInput == null) return false;
if (btn == null) return false;
if (listButtonsInput.Count >= 10) return false;
return true;
}
public bool CreateElements(RTCM_Sortie sortie)
{
if (listButtonsOutput == null) return false;
if (sortie == null) return false;
if (listButtonsOutput.Count >= 10) return false;
return true;
}
在测试方法之前,我将静态输入和输出对象声明为测试参数,这是个好方法吗?还是应该在每种测试方法中声明测试对象?
谢谢!
答案 0 :(得分:2)
我不是100%知道您的要求,但我认为您的要求如何处理传递的参数RTCM_Bouton btn和RTCM_Sortie出手。
public bool CreateElements(RTCM_Bouton btn)
{
if (listButtonsInput == null) return false;
if (btn == null) return false;
if (listButtonsInput.Count >= 10) return false;
return true;
}
对我来说这段代码有4个可能的返回值或路由,所以我需要4个测试,通常我遵循命名约定MethodName_Scenario_ExpectedResult
CreateElements_ListButtonsIsNull_ReturnsFalse()
CreateElements_BtnIsNull_ReturnsFalse()
CreateElements_ListButtonsIsNull_ReturnsFalse()
CreateElements_ListInputButtonsIs10orMore_ReturnsTrue()
您应该使用测试的// arrange部分来“设置”测试,包括方法需要运行的所有内容。用最小的实现创建类和您需要通过的所有对象(恰好足以使测试通过)。
例如
[TestMethod]
CreateElements_BtnIsNull_ReturnsFalse()
{
//arrange
RTCM_Config conf = new RTCM_Config();
var RTCM_Bouton btn = null;
//act
var result = conf.CreateElements(btn);
//assert
Assert.IsFalse(result);
}
因为对于某些测试,RTCM_Bouton需要为空,而对于其他测试,则为值,因此我将在每个测试的ranging方法中声明它,而不是像全局变量那样声明它。
答案 1 :(得分:1)
对于const测试对象RTCM_Config,可以使用类变量,并通过测试初始化方法对其进行初始化:
private RTCM_Config _config;
[TestInitialize]
public void TestInitialize()
{
_config = new RTCM_Config();
}
我认为,欢迎任何减少代码的内容。您还可以为按钮引入一个类变量,但是您必须为每个测试用例重新排列它。
第二个问题,您可以使用数据驱动的测试。
[DataTestMethod]
[DataRow(60, 13d)]
[DataRow(1800, 44d)]
public void Testcase(int input, double expected)
{
//Do your stuff
}
编码愉快!