我正在研究NoSQL数据库,并对单元测试有疑问.对业务逻辑进行单元测试的适当方法是什么?如何模拟NoSQL数据库?
您的业务逻辑不应直接接触数据库,而应通过数据库访问层。这使您可以模拟中间层以进行单元测试。为此,您可以使用依赖注入和模拟。有一些框架可以帮助您完成这两件事,但您也可以手动完成。这是一个例子:
假设我们有一个 DAL:
public class DBDataProvider: IDataProvider
{
public string getData()
{
//SQL to get data from actual database.
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这实现了一个为业务层提供数据的接口。它可能看起来像这样:
public Interface IDataProvider
{
String getData();
}
Run Code Online (Sandbox Code Playgroud)
您的业务层可能如下所示:
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.
}
}
Run Code Online (Sandbox Code Playgroud)
因此,现在在您的生产代码中,您将使用默认构造函数创建业务类,这将自动使您的类与数据库连接。但是,请注意,我们可以使用指定的 IDataProvider 创建 BusinessClass。因此,您可以制作一个“假”数据提供程序仅用于测试:
public class MockDataProvider: IDataProvider
{
public string getData()
{
//return some expected result that you can control, without doing a DB call.
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在您的测试中,您可以创建一个新的 MockDataProvider,并将其传递到 BusinessClass 的构造函数中。您的业务类现在将使用您的模拟数据提供程序,而不是真正的数据库。
在这里,我手工完成了所有操作,但它可以让您了解这是如何工作的。在现实生活中,您可以使用模拟和依赖注入框架为您编写一堆代码。
| 归档时间: |
|
| 查看次数: |
4756 次 |
| 最近记录: |