首页 文章

是否可以为具有以下方法的方法编写单元测试:1)返回类型void,2)访问说明符是私有的还是受保护的?

提问于
浏览
1

是否有可能为经典asp.net中具有void返回类型和访问说明符保护或私有的方法的类编写Nunit框架单元测试 . 让我明白,因为我是单元测试的初学者 .

更新:这是我的void函数,如果意味着,我怎么能为此编写单元测试?

public void function(TextBox txtBox, string Result)
        {
            if (Result.Trim().ToString() == " ")
            {
                txtBox.Text = "";
            }
            else
            {
                txtBox.Text = Result;
            }
        }

1 回答

  • 0

    我想你问了两个问题:

    是否有可能为具有void返回类型的方法的类编写Nunit框架单元测试?这是可能的,但在某种程度上你必须知道在执行方法时一切都很顺利 . 例如,如果它抛出异常,则测试失败,否则认为是成功的 . 此外,如果方法的副作用已更改这些属性,则可以检查其他属性 .

    是否有可能为经典asp.net中具有访问说明符保护或私有的类编写Nunit框架单元测试?对私人和受保护成员进行单元测试并不常见 . 但是,如果您需要它,可以通过反射来完成,但您也可以使用 internal 而不是私有 . 在AssemblyInfo.cs中,使用 InternalsVisibleTo 属性,如下所示:

    [assembly:InternalsVisibleTo("UnitTestAssembly")]
    

    只有UnitTestAssembly类可以访问内部成员 . 成员对其他课程保持隐藏 . UnitTestAssembly必须是单元测试项目/程序集的名称 . 当程序集强名时,这不起作用;在这种情况下,你必须指定更多 . 在这种情况下,This link可能对你有帮助 .

    更新:...我怎么能为此编写单元测试?在类中声明一个内部函数,其中也定义了 function

    internal string GetTextboxText(Textbox txtBox)
        {
            return txtBox.Text;
        }
    

    现在您可以编写单元测试:

    ...
      yourClassInstance.function(myTxtBox, "SomeString");
      Assert.IsTrue(yourClassInstance.GetTextboxText(myTxtBox) == "SomeString");
      ...
      yourClassInstance.function(myTxtBox, " ");
      Assert.IsTrue(yourClassInstance.GetTextboxText(myTxtBox) == "");
    

    但是当你指定一个空文本框时会发生什么?

    yourClassInstance.function(null, " "); // Will probably throw exception
      Assert.IsTrue(yourClassInstance.GetTextboxText(myTxtBox) == "");
    

    这怎么办呢?这是您可以在单元测试中验证的内容 .

相关问题