我是单元测试的新手。
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;
}
我想为这个方法编写单元测试。请建议我可以通过单元测试以及如何测试上述函数的哪个场景。如果你能详细说明一些代码示例以及如何模拟可以帮助我们,我可以更好地理解scenario.Thanks提前。
答案 0 :(得分:0)
一些可能的情况:
int.MaxValue
和int.MinValue
。_strConnectionStringName
为空,空,无效且有效。tblBook_Sel_BasedOnBookID
方法可能抛出的可能异常。BookList
类的属性,您可以拥有多个测试用例。请注意,您应该在此处调用模拟tblBook_Sel_BasedOnBookID
方法。这种方法并不关心tblBook_Sel_BasedOnBookID
内部发生的事情。但是,在这里处理混凝土类型看起来有点困难。
对于服务,再次进行模拟服务调用而不是进行真正的服务调用,并根据条件返回硬编码结果或异常。
答案 1 :(得分:0)
此功能是伸展的双线,其中一条线数据访问。这个函数将是我模仿单元测试那些依赖它的函数。您无法对其进行单元测试,因为它依赖于外部数据源,因此不是单个单元。如果涉及外部来源,您可以改为使用integration testing。
答案 2 :(得分:0)
你对数据访问类有很强的依赖性,所以你应该注入它,如果你有上下文作为类成员,通过构造函数注入初始化,你可以轻松地从你的单元测试中模拟它;最好的方法是使用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;
}
}