C# 尝试为实现IDB命令的单元测试创建接口
我使用的是VS2012内置的Fakes框架 此设计问题与以下职位相关: 我不确定如何为“IDbAccess”设计类来成功地“伪造”命中数据库 Ex代码(摘自上一篇文章):C# 尝试为实现IDB命令的单元测试创建接口,c#,unit-testing,microsoft-fakes,C#,Unit Testing,Microsoft Fakes,我使用的是VS2012内置的Fakes框架 此设计问题与以下职位相关: 我不确定如何为“IDbAccess”设计类来成功地“伪造”命中数据库 Ex代码(摘自上一篇文章): 我还应该提到,我需要使用“OracleCommand”对象而不是IDbCommand,这会使事情更加复杂。OracleCommand对象没有接口。找到相关文章。也许用Fakes框架测试这种方法是不可行的。。。或者至少删除数据库依赖项。隐藏OracleDataAccess对象可能不值得,尽管它会带来很多麻烦。你不太可能需要伪造所
我还应该提到,我需要使用“OracleCommand”对象而不是IDbCommand,这会使事情更加复杂。OracleCommand对象没有接口。找到相关文章。也许用Fakes框架测试这种方法是不可行的。。。或者至少删除数据库依赖项。隐藏OracleDataAccess对象可能不值得,尽管它会带来很多麻烦。你不太可能需要伪造所有涉及的东西。如果您有一个处理db访问的接口(最好是一个自定义包装器),那么您可以创建一个单独的实现,只返回传入的一些值。这就是假货的用途。db的工作方式与方法无关,只与特定调用的返回有关。
public class Foo : IFoo
{
IDbAccess db;
public Foo(IDbAccess db)
{
this.db = db;
}
public Dictionary<string,string> GetSomething(string xyz)
{
var result = new Dictionary<string,string>
db.commandText = "text..."
db.connection = conn;
result.Add(db.MethodWhatever(xyz));
return result;
}
}
[TestMethod()]
public void GetSomething()
{
var dba = new StubIDbAccess();
var target = new Foo(dba);
var expected = new Dictionary<string, string>
{
{"blahKey","blahValue"}
};
// get something
var results = target.GetSomething("xyzstring");
// verify results
var actual = results.whatever;
CollectionAssert.AreEqual(expected,actual);
}
public interface IDbAccess : IDbCommand
{
...?
}