孔隙法的单元试验C#
我正试图为void方法编写一个单元测试。但是,我找不到任何例子或明确的答案。下面是我在程序中使用的一种方法,我想为此编写一个单元测试。在这方面有人能帮我吗。提前谢谢孔隙法的单元试验C#,c#,unit-testing,C#,Unit Testing,我正试图为void方法编写一个单元测试。但是,我找不到任何例子或明确的答案。下面是我在程序中使用的一种方法,我想为此编写一个单元测试。在这方面有人能帮我吗。提前谢谢 //method for disable all comboBoxes private void comboDisable() { foreach (var j in this.Controls) { if (j.GetType().Equals(ty
//method for disable all comboBoxes
private void comboDisable()
{
foreach (var j in this.Controls)
{
if (j.GetType().Equals(typeof(ComboBox)))
{
ComboBox cmb = j as ComboBox;
cmb.Enabled = false;
}
}
}
正如一些人提到的,您确实应该将业务逻辑与UI分离。我在这里看到的问题是,单元测试是什么?您是否正在尝试查看某个组合框是否已禁用?如果所有组合框都已禁用
我的建议是非常。。。有问题。但是,如果您想用UI对逻辑进行单元测试。。。也许创建一个空的组合框集合,将每个被禁用的组合框添加到该集合中,然后让该方法返回禁用的组合框集合。然后可能会断言它们都被禁用。正如前面提到的,单元测试通常针对应用程序逻辑公共方法,而不是与UI相关的方法 如果你真的坚持要测试你的方法,你应该遵循以下步骤: 1) 设置阶段-这是一个初始化测试上下文的阶段。在您的情况下,初始化和打开包含组合框的表单 2) 拆卸阶段-这是一个让测试保持从未运行的阶段。例如,关闭并以您的形式进行处理 3) 实际测试-获取一些组合框实例,启用它们,调用您的方法,检查所有复选框是否已禁用 一些(伪)代码使用(未经测试,只是让您开始): 这假设您的方法是公共的,并且也是经过测试的组合框。从理论上讲,您可以这样做,但这确实很难看,不推荐这样做(方法重命名产生了一个
TargetInvocationException
,而不是编译错误)
这应该为单元测试的创建提供一个基本的想法,但是你真的应该这样做。你在哪里?编码技巧:简化
if(j.GetType().Equals(typeof(ComboBox))
到if(j是ComboBox)
。再往前走一步,您就可以消除这种情况&只需将var cmb=j写为组合框;如果(cmb!=null){cmb.Enabled=false;}
此代码正在工作。我正试图为这个方法编写一个单元测试用例,但我不确定如何处理和编写什么?至于单元测试无效方法——通常,这样的方法会起到一些作用。单元测试将验证是否完成了某些操作。强调效果。(如果编写的代码不能做到这一点,重构直到可以。)单元测试检查特定的功能,这些功能会改变对象的状态。因此,在执行此功能后,您将比较对象的预期状态和实际状态。因此,您需要重写方法以获取Combobox集合作为参数。然后在方法调用后检查。无论如何,你需要访问你的目标对象。嫌疑犯u未找到被视为实现细节的私有方法的答案,并且未对其进行测试。
[TestFixture]
public class YourFormTests
{
private Form frm;
[OneTimeSetUp]
public void SetUp()
{
frm = new Form();
frm.Show();
}
[OneTimeSetup]
public void TearDown()
{
frm?.Close();
frm?.Dispose();
}
[Test]
public void TestComboDisabled()
{
frm.cmbSomeName.Enabled = true;
frm.comboDisable();
Assert.IsFalse(frm.cmbSomeName.Enabled, "Combo is not disabled");
}
}