单元测试与模拟和单元测试的可能性
本文关键字:单元测试 可能性 模拟 | 更新日期: 2023-09-27 17:49:46
我是单元测试新手。
public List<BookList> GetBookList(int bookid)
{
List<BookList> _BookList = new List<BookList>();
//Consider if some wcf call is there then how we can develop unit test
using (DataClassesDataContext context = new DataClassesDataContext(_strConnectionStringName))
{
foreach (tblBook_Sel_BasedOnbookIDResult _tblBook_selResult in context.tblBook_Sel_BasedOnBookID(bookid))
{
BookList _bookListObject = new BookList();
//Setting the proerty here
_BookList .Add(_bookListObject);
}
}
return _BookList;
}
我想为这个方法写单元测试。请建议我可以通过单元测试测试上述函数的哪个场景,以及我如何更好地理解,如果您可以详细说明一些代码示例以及mock如何帮助我们在上述场景中。
你对数据访问类有很强的依赖性,所以可能你应该注入它,如果你有context作为类成员,通过构造函数的注入初始化,你可以很容易地在单元测试中模拟它;最好的方法是使用带有IDataAccess参数的构造函数。
编辑:这段代码可能有一些问题,但思路是:
public interface IDataClassesDataContext
{
tblBook_Sel_BasedOnbookIDResult tblBook_Sel_BasedOnBookID(int bookid);
}
public partial class DataClassesDataContext:IDataClassesDataContext
{
}
public class Class1
{
IDataClassesDataContext _context;
public Class1(IDataClassesDataContext context)
{
_context = context;
}
public List<BookList> GetBookList(int bookid)
{
List<BookList> _BookList = new List<BookList>();
//Consider if some wcf call is there then how we can develop unit test
using (_context)
{
foreach (tblBook_Sel_BasedOnbookIDResult _tblBook_selResult in _context.tblBook_Sel_BasedOnBookID(bookid))
{
BookList _bookListObject = new BookList();
//Setting the proerty here
_BookList.Add(_bookListObject);
}
}
return _BookList;
}
}
这个函数是一个展开的两行代码,其中一行是数据访问。我将模拟这个函数来对依赖它的函数进行单元测试。您不能对它进行单元测试,因为它依赖于外部数据源,因此不是单个单元。如果涉及到外部源,您可以使用集成测试代替。
一些可能的场景:
- bookId参数为负、零和正。您可以使用
int.MaxValue
和int.MinValue
-
_strConnectionStringName
为null、空、无效、有效。 - 测试
tblBook_Sel_BasedOnBookID
方法可能抛出的异常。 - 基于
BookList
类的属性,你可以有多个测试用例
请注意,这里应该调用模拟tblBook_Sel_BasedOnBookID
方法。这个方法并不关心tblBook_Sel_BasedOnBookID
内部发生了什么。但是,如果你处理的是具体的类型,这看起来有点困难。
对于service,应该再次进行模拟服务调用,而不是进行真正的服务调用,并且根据条件,它可以返回硬编码结果或异常。