我想对函数calTax()
执行一个单元测试,并且不希望数据库部分出现在它的构造函数中。
由于构造函数是自动调用的,所以我得到了这个错误:
“SQLite错误1:'没有这样的表:产品_t'.”
有什么方法可以从单元测试执行中跳过构造函数调用中的数据库部分,或者避免这个错误吗?
分类代码:
//constructor
public OrderVM()
{
using (var db = new DatabaseContext())
{
var list = db.Products_t.ToList();
Products_o = new ObservableCollection<Product>(list);
}
}
//function I want to test
public void calTax()
{
Tax = SubTotal * 5/ 100;
}
单元测试代码:
public class UnitTest1
{
[Fact]
public void Calculate_Tax()
{
var order = new OrderVM();
order.SubTotal = 100;
order.calTax();
order.Tax.Should().Be(5);
}
}
1条答案
按热度按时间ev7lccsx1#
使用依赖注入或直接传入
list
。在任何情况下,都需要删除对DatabaseContext
的依赖:然后你可以通过传递一个
List<Product>
来测试calTax()
方法,在某些情况下,它也可能是一个空列表:如果您需要更大的灵活性,或者由于某种原因无法向
OrderVM
构造函数传递参数,您可能需要熟悉依赖注入(DI)和控制反转(IoC)。