我正在研究 NoSQL 数据库并且有一个关于单元测试的问题。对业务逻辑进行单元测试的合适方法是什么?如何模拟 NoSQL 数据库?
最佳答案
您的业务逻辑不应直接接触数据库,而应通过数据库访问层。这使您可以模拟该中间层以进行单元测试。为此,您可以使用依赖注入(inject)和模拟。有些框架可以帮助您完成这两件事,但您也可以手动完成。这是一个例子:
假设我们有一个 DAL:
public class DBDataProvider: IDataProvider
{
public string getData()
{
//SQL to get data from actual database.
}
}
如您所见,它实现了一个接口(interface),用于为您的业务层提供数据。它可能看起来像这样:
public Interface IDataProvider
{
String getData();
}
您的业务层可能看起来像这样:
public BusinessClass
{
private IDataProvider dataProvider;
public BusinessClass()
{
dataProvider = new DBDataProvider();
}
public BusinessClass(IDataProvider provider)
{
dataProvider = provider;
}
public void doBusinessStuff()
{
dataProvider.getData();
//Do something with data.
}
}
现在在您的生产代码中,您将使用默认构造函数创建您的业务类,这将自动使您的类与数据库建立连接。但是,请注意,我们可以使用指定的 IDataProvider 创建 BusinessClass。因此,您可以制作一个仅用于测试的“假”数据提供者:
public class MockDataProvider: IDataProvider
{
public string getData()
{
//return some expected result that you can control, without doing a DB call.
}
}
现在在您的测试中,您可以创建一个新的 MockDataProvider,并将其传递到 BusinessClass 的构造函数中。您的业务类现在将使用您的模拟数据提供程序,而不是真正的数据库。
在这里,我手工完成了所有操作,但它可以让您了解其工作原理。在现实生活中,您可以使用模拟和依赖注入(inject)框架为您编写一堆这样的代码。
关于c# - NoSQL - 如何模拟数据库进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10048260/