Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用HttpCurrentContext的单元/集成测试代码_C#_Asp.net_Nunit - Fatal编程技术网

C# 使用HttpCurrentContext的单元/集成测试代码

C# 使用HttpCurrentContext的单元/集成测试代码,c#,asp.net,nunit,C#,Asp.net,Nunit,正在尝试使Nunit在ASP.Net中工作 问题是,我正在测试一个自定义控件-它引用一个全局资源 当我尝试对它进行单元测试时 /// </summary> [Test] public void TestSetAndGetNumber() { PhoneNumber phone = new PhoneNumber(PhoneNumber.NumberType.Business, "", true, "");

正在尝试使Nunit在ASP.Net中工作

问题是,我正在测试一个自定义控件-它引用一个全局资源

当我尝试对它进行单元测试时

/// </summary>
        [Test]
        public void TestSetAndGetNumber()
        {
            PhoneNumber phone = new PhoneNumber(PhoneNumber.NumberType.Business, "", true, "");
            string expectedString = "1-800-Goat-Phone";
            string resultString = "1-800-Goat-Phone";
            resultString = phone.Value = resultString;
            Assert.AreEqual(expectedString, resultString, "GetNumberMatch method returned unexpected result.");
            Assert.Fail("Create or modify test(s).");
        }
//
[测试]
public void TestSetAndGetNumber()
{
PhoneNumber phone=新电话号码(PhoneNumber.NumberType.Business,“,true,”;
string expectedString=“1-800-Goat-Phone”;
字符串结果string=“1-800-Goat-Phone”;
resultString=phone.Value=resultString;
AreEqual(expectedString,resultString,“GetNumberMatch方法返回意外结果”);
Assert.Fail(“创建或修改测试”);
}
我将获得“无法加载应用程序\全球资源”


试图弄清楚我是否应该尝试模拟HttpContext,但没有人验证这是可以做到的。

这听起来可能有点油嘴滑舌,但你不能重新设计PhoneNumber类,使其可测试吗

如果您想使用单元测试,这似乎是一种可行的方法。
如果您不能修改PhoneNumber类,那么测试它有什么意义?

这是一个典型的场景,您应该以正确的方式将类设置为可测试的。如果您有外部依赖项(对全局资源的引用),那么您应该将其作为抽象,以便可以模拟它


我建议您看看这个,它解释了如何将您的类设计为更可测试的。或者,您可以从下载示例。设置单元测试主要是以更松散耦合的方式设计类,这样您就可以在不与DB/文件系统/其他资源交互的情况下有效地测试它。

被测试的类是一个自定义控件PhoneNumber。电话号码的所有实例当前都需要点击GlobalResources以获取标签文本等。我不确定您建议如何更改该类,以便您可以在不点击GlobalResource的情况下测试其部分内容。如果PhoneNumber使用接口访问GlobalResources,我不知道如何让单元测试干净地更改该接口以返回模拟数据。测试的目的是什么?是否要在GlobalResource中测试字符串内容?我有点搞不懂你到底想测试什么?getter setter中的一些逻辑。我意识到有些人对此的反应是在getter setter中没有逻辑……但它是getter/setter类型的逻辑(显示逻辑)。从设计模式的角度来看,我不太喜欢界面没有什么价值。事实上,我只是想在单元测试中模拟httpcontext,但也许我希望是一个明星。你能将“getter/setter类型逻辑”提取到不同的方法中吗?我的观点是,您只需要测试您的逻辑,而不需要测试httpcontext逻辑。所以,如果您只需要httpContext中的一些属性,那么将其提取并调用显示逻辑方法。