用模拟单元测试和单元测试的可能性

时间:2014-03-13 06:20:50

标签: c# unit-testing mocking

我是单元测试的新手。

 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提前。

3 个答案:

答案 0 :(得分:0)

一些可能的情况:

  1. bookId参数为负数,零和正数。您可以使用int.MaxValueint.MinValue
  2. _strConnectionStringName为空,空,无效且有效。
  3. 测试tblBook_Sel_BasedOnBookID方法可能抛出的可能异常。
  4. 根据BookList类的属性,您可以拥有多个测试用例。
  5. 请注意,您应该在此处调用模拟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;
 }
}