- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class ConfigSection : ConfigurationSection
{
public static ConfigSection GetConfigSection()
{
return (ConfigSection)System.Configuration.ConfigurationManager.
GetSection("ConfigSections");
}
[System.Configuration.ConfigurationProperty("ConstantsSettings")]
public ConstantSettingCollection ConstantsSettings
{
get
{
return (ConstantSettingCollection)this["ConstantsSettings"] ??
new ConstantSettingCollection();
}
}
public class ConstantSettingCollection : ConfigurationElementCollection
{
public ConstantElements this[object key]
{
get
{
return base.BaseGet(key) as ConstantElements;
}
set
{
if (base.BaseGet(key) != null)
{
base.BaseRemove(key);
}
this.BaseAdd(this);
}
}
protected override ConfigurationElement CreateNewElement()
{
return new ConstantElements();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((ConstantElements)element).Key;
}
}
public class ConstantElements : ConfigurationElement
{
[ConfigurationProperty("key", IsRequired = true)]
public string Key
{
get
{
return this["key"] as string;
}
}
[ConfigurationProperty("val", IsRequired = true)]
public string Constants
{
get { return this["value"] as string; }
}
}
}
public class ConstantHelper
{
public static string ConstantForLog
{
get
{
return ConfigSection.GetConfigSection().ConstantsSettings["ConstantForLog"].Constants;
}
}
}
上面的单元测试是从应用程序配置中读取一些常量值的代码这是我在构造函数中的代码已分配的值。
public class HomeController
{
protected string constants;
public HomeController()
{
constants = ConstantHelper.ConstantForLog;
}
}
测试代码
[TestClass]
public class HomeControllerTester
{
[TestMethod]
public void Initialize_Tester()
{
//Creating Instance for the HomeController
HomeController controller = new HomeController();
}
}
调试时发现 Appsettings 没有被 ConstantHelper 类读取
找到解决方案实际上它工作正常错误是在 app.config 中完成的
我遇到的另一个问题是 ConfigSection对于 MVC 应用程序 web.config,不需要命名空间 type="type"对于单元测试 app.config,需要命名空间 type="type,_namespace"
最佳答案
您必须将 ConstantHelper
注入(inject)到 HomeController
中。您可以将其接口(interface)出来,然后将其注入(inject)。从单元测试传递 IConstantHelper
的模拟对象。
更新
我已经为 ConstantHelper 类定义了一个接口(interface),让我有机会注入(inject)和模拟依赖项。
ConstantHelper.cs
public class ConstantHelper : IConstantHelper
{
public string ConstantForLog
{
get
{
return ConfigSection.GetConfigSection().ConstantsSettings["ConstantForLog"].Constants;
}
}
}
public interface IConstantHelper
{
string ConstantForLog { get; }
}
HomeController.cs
请注意,我现在从外部注入(inject)常量助手,以便单元测试可以模拟它。
public class HomeController : Controller
{
private readonly IConstantHelper _constantHelper;
public HomeController(IConstantHelper constantHelper)
{
_constantHelper = constantHelper;
}
public ActionResult Index()
{
return View(_constantHelper.ConstantForLog);
}
}
HomeControllerTest.cs
[TestClass]
public class HomeControllerTest
{
[TestMethod]
public void Index_WithDependecySetupCorrectly_ReturnTestString()
{
var mockHelper = new Mock<IConstantHelper>();
const string testDataString = "TestString";
mockHelper.Setup(z => z.ConstantForLog).Returns(testDataString);
//Creating Instance for the HomeController
var controller = new HomeController(mockHelper.Object);
var result = controller.Index() as ViewResult;
Assert.IsNotNull(result);
Assert.AreEqual(testDataString, result.ViewName);
}
}
我使用 Moq 模拟框架。只需在测试项目的包管理器控制台中使用以下命令安装它:
Install-Package Moq
希望这对您有所帮助。
关于c# - 如何对使用静态类的方法进行单元测试,而静态类又使用 ConfigurationElementCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26624465/
我正在使用 System.Configuration 命名空间类型来存储我的应用程序的配置。我需要存储原始类型 (System.Double) 的集合作为该配置的一部分。创建以下内容似乎有点矫枉过正:
我正在尝试对自定义 ConfigurationElementCollection 进行单元测试,但我在以编程方式填充集合时遇到问题。当我打电话时 BaseAdd() ,我得到以下异常: Configu
public class ConfigSection : ConfigurationSection { public static ConfigSection GetConfig
是否有可能有一个 CollectionElementCollection 具有许多不同类型的 CollectionElements,例如: seems deprecated .
我(希望)设置了我自己设计的 ConfigurationElementCollection,并将电子邮件作为键。怎么办?实际上在网络上很难找到。我如何: 遍历它? 查看特定元素是否存在? 获取特定元素
配置如下 ... other entries 当实现一个 MyCollection 时,我应该如何处理“默认”属性? 最佳答案 假设您有这个 .config 文件:
我已经编写了一些自定义配置集合、元素等。现在,我想做一个简单的 Linq 语句: ServerDetails servers = ConfigurationManager.GetSection("se
我想要一个像下面这样的配置部分: 这个想法是实际ConfigurationElement created 是由 type 值定义的,并且每个元素都有自己特定的属性集。 另一种选择是所有元素
我创建了自定义 ConfigurationElement 和 ConfigurationSection 以便在启动时更轻松地设置大量应用程序参数。但是,我真的很想对这个逻辑进行单元测试。 服务连接 p
我正在尝试在项目中实现自定义配置部分,但我一直遇到我不理解的异常。我希望有人可以填补这里的空白。 我的 App.config 看起来像这样:
我是一名优秀的程序员,十分优秀!