繁体   English   中英

具有模拟功能的单元测试和单元测试的可能性

[英]unit testing with mock and possibility of unit testing

我是单元测试的新手。

 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;
    }

我想为此方法编写单元测试。请建议我可以通过单元测试测试上述功能的哪种情况以及如何进行测试。如果您可以详细讲解一些代码示例以及在上述情况下模拟可以为我们提供帮助,那么我可以更好地理解。提前。

一些可能的情况:

  1. bookId参数为负,零和正。 您可以使用int.MaxValueint.MinValue
  2. _strConnectionStringName为null,空,无效和有效。
  3. 测试tblBook_Sel_BasedOnBookID方法可能引发的异常。
  4. 根据BookList类的属性,可以有多个测试用例。

请注意,您应该在此处调用模拟tblBook_Sel_BasedOnBookID方法。 此方法实际上并不关心tblBook_Sel_BasedOnBookID内部发生的tblBook_Sel_BasedOnBookID 但是,如果您在此处处理具体类型,这似乎有点困难。

对于服务,应再次进行模拟服务调用,而不是进行实际服务调用,并且根据条件它可以返回硬编码结果或异常。

此功能是一个扩展的两层函数,其中一行是数据访问 我会嘲笑这个功能,以对依赖它的人进行单元测试。 您不能对其进行单元测试,因为它依赖于外部数据源,因此不是单个单元。 如果涉及外部资源,则可以改用集成测试

您对数据访问类有很强的依赖性,因此可能应该注入它,如果您将上下文作为类成员,并通过构造函数的注入进行初始化,则可以轻松地从单元测试中对其进行模拟; 最好的方法是使用带有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;
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM