Moles是Microsoft创建的隔离框架.Moles的一个很酷的功能是它可以"模拟"静态/非虚拟方法和密封类(这对于像Moq这样的框架是不可能的).以下是Moles可以做的快速演示:
Assert.AreNotEqual(new DateTime(2012, 1, 1), DateTime.Now);
// MDateTime is part of Moles; the below will "override" DateTime.Now's behavior
MDateTime.NowGet = () => new DateTime(2012, 1, 1);
Assert.AreEqual(new DateTime(2012, 1, 1), DateTime.Now);
Run Code Online (Sandbox Code Playgroud)
看起来像Moles能够DateTime.Now在运行时修改CIL主体.由于Moles不是开源的,我很想知道Moles使用哪种机制来在运行时修改方法的CIL.谁能摆脱任何光明?
我正在努力学习如何进行单元测试和模拟.我理解TDD和基本测试的一些原理.但是,我正在考虑重构下面的代码,这些代码是在没有测试的情况下编写的,并且我试图了解它是如何更改以使其可测试的.
public class AgentRepository
{
public Agent Select(int agentId)
{
Agent tmp = null;
using (IDataReader agentInformation = GetAgentFromDatabase(agentId))
{
if (agentInformation.Read())
{
tmp = new Agent();
tmp.AgentId = int.Parse(agentInformation["AgentId"].ToString());
tmp.FirstName = agentInformation["FirstName"].ToString();
tmp.LastName = agentInformation["LastName"].ToString();
tmp.Address1 = agentInformation["Address1"].ToString();
tmp.Address2 = agentInformation["Address2"].ToString();
tmp.City = agentInformation["City"].ToString();
tmp.State = agentInformation["State"].ToString();
tmp.PostalCode = agentInformation["PostalCode"].ToString();
tmp.PhoneNumber = agentInformation["PhoneNumber"].ToString();
}
}
return tmp;
}
private IDataReader GetAgentFromDatabase(int agentId)
{
SqlCommand cmd = new SqlCommand("SelectAgentById");
cmd.CommandType = CommandType.StoredProcedure;
SqlDatabase sqlDb = new SqlDatabase("MyConnectionString");
sqlDb.AddInParameter(cmd, "AgentId", DbType.Int32, …Run Code Online (Sandbox Code Playgroud) 这是我想象的开发和部署过程:
my_project.fpm打包整个事情.我使用RVM和Bundler来解决一些痛点,但RVM并不关心创建可重定位的Ruby安装,因此您无法~/.rvm/rubies进入项目目录并期望一切都能解决.您必须重写各种硬编码#!行,在某些情况下,您必须将.so文件移动到lib目录中.我通过搜索互联网一起破解了一组脚本,这些互联网一起完成了我想要的东西,但整个事情感觉就像一个巨大的黑客.
我不小心偶然发现了https://github.com/ot/bpt,它可以用于构建可以完全重定位的Ruby安装的东西但是这个项目在两年多的时间里没有被触及所以我有点犹豫在它上面构建一些东西.
我没有看到这个问题更优雅的解决方案吗?人们如何隔离和部署Ruby项目?我觉得这应该是一个解决的问题.
我意识到这已经被问过,但最后一次是在2008年中期.
如果你现在正在开始一个新项目,你会使用哪一个?为什么?他们在可读性,可用性,可维护性和整体稳健性方面的优势/劣势是什么?
我已经使用过RhinoMocks产品很长一段时间了,对产品非常满意 - 从来没有理由去其他地方看看.我最近被TypeMock的优秀人员要求给他们的产品一个旋转,并想知道其他开发人员对Typemock Isolator的看法.你会建议其他隔离/模拟框架吗?为什么?
阅读了关于Moles的好东西后,我想在我们用于编写单元测试的工具集中添加一个隔离框架.
我们的应用程序在Mono下运行,因为它部署在Linux和Windows上,我似乎找不到支持Mono的框架.
我已经看过一些关于使用塞西尔操纵装配的文章,但我很难找到任何我们可以实际使用的东西.
mocking ×4
unit-testing ×4
c# ×3
.net ×2
moles ×2
deployment ×1
java ×1
mono ×1
ruby ×1
stub ×1