Mocking File.OpenWrite()
我正在尝试编写一个单元测试,该测试将写入文件打开的文件.popenwrite(). 我正在使用SystemWrapper的IfileWrap接口包装文件.在生产中,我正在使用简单注射器注入SystemWrapper的FileWrap类的实例,这很好.但是我试图在我的单元测试中嘲笑IfileWrap,使用MOQ,但这行不通. 我是SystemWrapper的新手,我正在尽力弄清楚它的使用方式.据我所知,ifilewrap.openwrite()返回一个IfileWrap实例,您可以从中获得FileStreamInstance的流. 所以,在我的班级测试中,我在构造函数中注入一个IfileWrap: public class ClassUnderTest { private readonly IFileWrap fileWrap; public ClassUnderTest(IFileWrap fileWrap) { this
12 2024-04-26
编程技术问答社区
C#单元测试与VBScript的嘲弄
我已经对需要测试的VBScript(.vbs)进行了更改. 这些是.cls文件中定义的一些VB6类. vbscript需要这些类的对象. 我的更改仅限于VBScript中仅需要一个类别的对象的一个​​函数. 我想避免必须运行整个脚本并启动所有对象. 有什么办法,我可以编写单元测试来测试我的脚本部分并模拟我需要通过的对象吗? 解决方案 这是我使用C#单元测试使用Rhinomocks模拟VB6 COM类的方式: 使用regsvr32在我的计算机上注册了COM组件(ABC.DLL).这也要求我注册VB6类使用的所有类型和组件. 然后,我通过添加参考> com> abc 添加了对COM组件(ABC)的引用 我正在使用.NET 4.5.1框架,当我添加对COM组件的引用时,它会为我创建一个Interop汇编(Interop.abc.dll) 右键单击DLL的属性,并确保将嵌入的Interop类型设置为true.这允许COM接口中的所有未知数据类型都被视为
8 2024-04-26
编程技术问答社区
用一个匿名类型的参数来模拟一个方法
我有以下代码: var connector = new Mock(); connector .Setup(cn => cn.listar("FetchEstandar", new Estandar(), new {Id = 1})) .Returns(new List{ new Estandar {Id = 1} }); var entidad = connector.Object .listar("FetchEstandar", new Estandar(), new {Id = 1}); 当我在连接器对象上调用listar时,我会得到"Expression Cannot Contain an Anonymouse Type"错误.我已经尝试了犀牛模拟和订单. 有什么办法可以模拟此方法?难道我做错了什么?另外,我可以忽略此参数,但我不知道如何.我真的只需要测试第一个参数的值,而ignorgumen
10 2024-04-26
编程技术问答社区
在做TDD时,处理转换方法的最佳方式是什么?
尝试进行测试驱动开发时的方法中发生的转换是什么? 是创建执行转换的静态实用方法,然后对这些实用程序方法编写单元测试?我觉得问题是当您针对调用该实用程序方法的父方法编写测试时,您必须考虑转换的情况,因为大多数模拟框架都不模拟实用程序方法.因此,编写处理父方法的验证方法变得困难. 我想到的另一个选项是创建负责转换的接口,并在测试调用方法时嘲笑该接口.接口旁边将有一个实现.这样做的问题是,似乎正在编写额外的代码只是为了进行转换,并且在配置IOC容器时需要考虑许多新的依赖. 一个完美的示例是一个控制器操作,需要从视图模型转换为其连接到服务的输入的实体.这是什么最佳实践? 解决方案 您可以 以及有关TDD检查的更多信息,请检查下面的链接 tdd/bdd screencast/ 使用C#和C#和犀牛 其他解决方案 我将使用 automapper .它构建的目的是应对这种情况,并且其大部分核心都已经过单位测试.您可以编写一些非常基本的单元测试,以确保您的转换始
8 2024-04-25
编程技术问答社区
如何测试事件的发射
开始阅读之前,请注意,我将所有代码包含在一个完整的示例中,因此可能很长. :D 问题 我目前正在使用Exchange Web服务(EWS)从事一个项目,该项目负责订阅EWS,每当新邮件到达指定的邮箱时,请求回电对特定事件.但是,几周来,我们一直在电子邮件服务器遇到问题.由于我们的实施与在线交流非常紧密地结合在一起,因此我们无法继续工作.这是我想创建一个可以在不交流的情况下使用的小型事件处理程序实现的想法.显然,如果不交流在线,我将不得不手动提出活动. 我创建通用事件处理程序接口的理由是,我可以创建一个可以在不交换的情况下使用的事件处理程序类.因此,对于Exchange实施,我将拥有IEventHander.对于虚拟实现,我将拥有EventHandlerBase,这就是我所显示的.另外,后者的所有EventArgs对象都是自定义的,没有任何功能.
10 2024-04-25
编程技术问答社区
System.IO.Abstraction不能找到IStreamWriter。
我正在尝试单元测试一种调用StreamWriter的方法.我正在尝试使用System.IO.Abstraction来模拟StreamWriter,但是我在最后一个nuget上找不到界面,也查看了源代码,但不知道该替代方案是什么,其他东西,例如正在按预期工作. 谢谢, 解决方案 我还在寻找如何通过system.io.io.abstractions嘲笑文件流,最初看不到它.它正在悬挂FileInfo对象.它产生了略微笨拙的代码,需要进行铸造.我的原始代码: FileStream fileStreamBack = null; using (fileStreamBack = new FileStream(fileFrom, FileMode.Open, FileAccess.Read)) using (var fileStreamf = new FileStream(fileTo, FileMode.Create, FileAccess.Write)) {
4 2024-04-25
编程技术问答社区
需要对一个严重依赖Office.Interop(COM)类的自定义类进行单元测试
我有一个名为ExcelManager的类,该类负责在其构造函数中采取excel文件的路径,并具有将表格名称作为字符串或表格索引作为int作为int的方法,然后将数据解析在该表上减去标头并构建并返回数据表. 我已经书面的集成测试成功测试了大多数ExcelManager类,但是它们只能在安装Excel的系统上运行. 我要做的是分解ExcelManager类,以便我可以嘲笑电子表格和测试而无需Excel或找到单位测试的方法,并可能以模拟对象进行测试(我不是)当然,哪个是更好的练习),但是我真的看不到一种方法,这是一些Excel Manager代码: public ExcelManager(string FilePath) { try { application = new ApplicationClass(); } catch (Exception) {
12 2024-04-25
编程技术问答社区
如何将AutoFac与Common.Logging连接起来?
我有类似的课程: public class LoggedFoo { private readonly ILog _logger; public LoggedFoo(ILog logger) { this._logger = logger; } public DoStuff() { this._logger.Info(i => i("Doing stuff...")); } } 业务需求之一是为某些功能生成日志,所以我自然想模拟ILog以验证. 但是,common.库库支持基于类型的记录器,沿着: 的行 var logger = LogManager.GetLogger(); ...或: var logger = LogManager.GetLogger(typeof(LoggedFoo)); 问题是,我们正在使用AUTOFAC进行依赖注入,我
2 2024-04-25
编程技术问答社区
嘲弄HttpContext(会话)
我已经阅读了许多有关MVC嘲笑的文章和博客...其中许多是有帮助的,但我仍然有一些问题: 这样一个问题是我需要在Action Result中使用会话,但是在我的测试中,我会在访问会话时得到NullReferenceException. public ActionResult Index() { if (Session["Something"] == null) { Session.Add("Something", ); } else { Session["Something"] = ; } return redirect to action("Index2"); } 我的测试看起来像这样: HomeController controller = new HomeController; var result = controller.Index() as ViewResult; Assert.AreE
6 2024-04-24
编程技术问答社区
使用模拟的TextWriter测试控制台输出
我正在尝试为输出到控制台的类编写单元测试.为了捕获此类的控制台输出,我决定创建一个模拟文本Wretter对象,并将控制台输出重定向到测试类中. [TestMethod] public void TestMethod() { var outLines = new List(); var mockWriter = new Mock(); mockWriter.Setup(writer => writer.WriteLine(It.IsAny())) .Callback(s => outLines.Add(s)); Console.SetOut(mockWriter.Object); // ConsoleLogger is the class being tested // It will essentially just print its para
6 2024-04-24
编程技术问答社区
为一个方法同时编写classist和mockist单元测试,有什么好处吗?
一个人可以按照 http://martinfowler.com/来编写古典主义者或驾驶方式.文章/MockSarentStubs.html 为单一方法编写典型和驾驶员单位测试会增加代码的鲁棒性,因为状态和行为均已测试? 我的同事似乎只是一路嘲笑,并且由于它们是"示例",因此假定我也会嘲笑,除非我有充分的理由不这样做. (我是单位测试的新手).但是,我觉得仅测试驾驶方式就假定了未经测试的私人方法实现的正确性,这就是为什么我也希望进行分类主义测试(以间接测试私人方法). 还是浪费时间? 解决方案 私人方法只是类的内部工作.换句话说,如果您充分测试公共方法,则可以使用私人方法,但根据定义,要做他们需要做的事情,因为只有公共行为很重要. 我有两个关于"状态"的想法. 1)如果状态是内部(私人),则是实现行为的实现.这是一个内部的"秘密".如果很重要,请测试结果行为. 2)如果国家是公共的... 没有问题. 我会嘲笑. 其他解决方案 使用
6 2024-04-24
编程技术问答社区
模拟一个方法而不需要先模拟一个类
我正在使用MOQ4在我的 Unitests 中嘲笑事物.我有一个课说 testClass ,其中一种称为 testMethod 的方法是我想测试的. 因此,我的问题是我的 testMethod 需要对我的测试阶段中的 testList 进行检查.这样: - public Class TestClass { public readonly ISomeService _someService; public bool TestProperty { get; private set; } public List testlist { get; private set; } Public TestClass(ISomeService someService) { _someService = someService; } public async Task TestMetho
14 2024-04-24
编程技术问答社区
模拟的HttpRequest失去了查询字符串
我需要测试一个管理复杂Querystring的助手类. 我使用这种辅助方法模拟HttpContext: public static HttpContext FakeHttpContext(string url, string queryString) { var httpRequest = new HttpRequest("", url, queryString); var stringWriter = new StringWriter(); var httpResponse = new HttpResponse(stringWriter); var httpContext = new HttpContext(httpRequest, httpResponse); var sessionContainer = new HttpSessionStateContainer("id", new SessionStateItemCollect
4 2024-04-23
编程技术问答社区
在Moq C#中模拟运算符的行为
希望你一切都好. 我正在使用c#中的小量索值创建一些测试.我嘲笑的对象之一已覆盖==,>和 是否有人知道是否可能,如果是这样.我问的原因是我试图注入一个模拟的存根,因为我给出了具有深度且肮脏依赖性的一些遗留代码. 您的时间得到赞赏 谢谢 解决方案 当您覆盖此类操作时,您也应该提供其命名等效物.如果您以这样的方式重新制作代码,则更容易模拟它. public static bool operator ==(SomeType a, SomeType b) { return a.Equals(b); } public virtual bool Equals(SomeType b) { // yours logic here return base.Equals(b) }
6 2024-04-23
编程技术问答社区
C# 用内部属性设置器模拟一个类
我正在尝试建立一个单元测试. 类位置在A 第三方库中实现.但是对于我的单位测试,我需要将大小属性设置为特定值. public class Position { private double _size; private double Size { get { return _size; } internal set { _size = value; } } } 我读了这篇文章:">您如何为包含只读成员的接口创建单位测试存根? 但无法弄清楚如何使它对我有用. 这是正在测试的类(只是一个简化的示例). CalcPositionMetric()方法中的pos参数必须为Position类型: public class PositionMetrics { public PositionMet
6 2024-04-23
编程技术问答社区
从一个被模拟的方法中返回一个模拟的方法
我不确定如何做. 给定我有 public interface IFactory where T : new() { IWrapper GetT(string s); } public interface IWrapper where T : new() { void Execute(Action action); } 当我这样做 public class MoqTest { public void test() { Mock> wrapperMock = new Mock>(); Mock> factoryMock = new Mock>() .Setup(p => p.GetT(
6 2024-04-23
编程技术问答社区
嘲弄属性-C#
我在项目中使用自定义属性,我想将它们集成到我的单位测试中. 现在,我使用犀牛模拟来创建我的模拟,但我看不到向它们添加我的属性(和其中参数)的方法. 我错过了什么,还是不可能?其他模拟框架?还是我必须使用我的属性创建虚拟实现? 示例:我在插件架构(iplugin)中有一个接口,并且有一个属性可以在属性中添加元信息.然后,我在插件实现中查找具有此属性的属性以进行额外的处理(存储其值,将其标记为GUI仅读取...) 现在,当我创建模拟时,我可以轻松地将属性添加到属性或对象实例本身吗? 编辑:我找到了一个带有相同问题的帖子 - > 链接.答案没有100%,是Java ... 编辑2:可以完成...搜索了更多(因此),并找到了2个相关问题(+答案) 在这里stackoverflow.com/questions/268426/how-do-i-i-add-attributes-to-a-a-method-at-runtime"> here 现在,这已经
6 2024-04-23
编程技术问答社区
在MVC 5中嘲讽会话不工作
我正在在测试控制器操作中存储会话中的值.我已经阅读了几篇有关如何模拟会议的文章 - 单位测试/10126711#10126711">设置单位测试中的httpcontext当前会话.但是,当我钻入Locals | this | base | HttpContext Sessions时,仍为null,并且在设置会话变量时,测试失败了,而无效参考异常. 这是工作代码. vM.BusAcnt.Id返回有效的int,如果我用int值代替它,则测试仍然失败,因为Session是无效的,因此没有值存储在其中. 我正在使用MVC5,EF6和Xunit,MOQ和RESHARARPER TEST RUNNER的最新版本. 行动: public ActionResult Details(int id) { var vM = new BusAcntVm(); vM.BusAcnt = _db.BusAcnts.FirstOrDefault(bA => bA.Id == id);
10 2024-04-23
编程技术问答社区