我有一个这样的课:
Class A
{
public boolean do(String s)
{
C c = DB.GetResult(s);
....
return yes/no
}
}
我想如何使用Mockito编写单元测试,但如何模拟内部对象C以禁止数据库连接操作。
答案 0 :(得分:0)
你的意思是模拟内部对象DB而不是C吗?
在你喜欢的代码中你不能。你必须将DB注入到A类中。然后在单元测试中注入mock / stub而不是与数据库对话的对象。
编辑: 你可以这样做(我正在使用C#):
Class A
{
private readonly IDb database;
// you can inject by hand or using IoC container
// if you don't like that you have to pass IDb implementation everywhere
// where you create objects of type A you can add another constructor - look under
public A(IDb database)
{
this.database = database;
}
// here you call the above constructor and pass you original DB object
public A() : this(new DB())
{
}
public boolean do(String s)
{
C c = database.GetResult(s);
....
return yes/no
}
}
当然,您的DB类必须实现IDb接口。
interface IDb
{
C GetResults(String s);
}
现在你在测试中这样做:
var a = new A(new TestDBDoingReturningExactlyWhatYouTellItToReturn());
并在应用程序代码中:
var a = new A(new DB());
或无参数构造函数,它完全执行上面的行
var a = new A();