单元测试和集成测试业务应用程序(4)

发表于:2016-06-01来源:不详作者:Omar Al Zabir点击数: 标签:单元测试
}); }); }); } }); } 需要进一步的解释:为从模板用户发现每个页面确保新用户从模板用户的页面的部件获得完全一样的页面。获得来自新用户的页面的窗口小

  });

  });

  });

  }

  });

  }

  需要进一步的解释:为从模板用户发现每个页面确保新用户从模板用户的页面的部件获得完全一样的页面。获得来自新用户的页面的窗口小部件比较每个插件。当在做业务层的变化对于每个插件确保具有相同的名称,状态,位置等独一无二的部件,我可以运行集成测试,以确保关键功能是否按预期工作完成,而且在整个业务层没有破损任何地方。 我用xunit.console.exe上运行的集成测试测试并生成一个不错html报告:

  该报告使用下面的命令行产生:

  d:\xunit\xunit.console.exe

  d:\trunk\src\Dropthings.Business.Facade.Tests\bin\Debug\Dropthings.Business.Facade.Tests.dll

  /html FacadeTest.html

  您可以使用GUI xUnit:

  使用BDD的单元测试测试驱动开发

  到目前为止,我们已经通过代码编写测试,但如果你先代码编写测试有关驱动开发?假设我们要添加行为:给定一个PageRepository ,当 Insert被调用时,它应该在数据库中插入页面,清除了得到的新页面,用户页面任何缓存集合,返回新插入的页面。

  编写测试代码:

  [Specification]

  public void InsertPage_should_insert_a_page_in_database_and_cache_it()

  {

  var cache = new Mock();

  var database = new Mock();

  IPageRepository pageRepository = new PageRepository(database.Object, cache.Object);

  const int pageId = 1;

  var page = default(Page);

  var samplePage = new Page() { ID = pageId, Title = "Test Page", ColumnCount = 3,

  LayoutType = 3, UserId = Guid.NewGuid(), VersionNo = 1,

  PageType = Enumerations.PageTypeEnum.PersonalPage, CreatedDate = DateTime.Now };

  database

  .Expect(d => d.Insert(DropthingsDataContext.SubsystemEnum.Page,

  It.IsAny>()))

  .Returns(samplePage);

  "Given PageRepository".Context(() =>

  {

  // It will clear items from cache

  cache.Expect(c => c.Remove(CacheSetup.CacheKeys.PagesOfUser(samplePage.UserId)));

  });

  "when Insert is called".Do(() =>

  page = pageRepository.Insert((newPage) =>

  {

  newPage.Title = samplePage.Title;

  newPage.ColumnCount = samplePage.ColumnCount;

  newPage.LayoutType = samplePage.LayoutType;

  newPage.UserId = samplePage.UserId;

  newPage.VersionNo = samplePage.VersionNo;

  newPage.PageType = samplePage.PageType;

  }));

  ("then it should insert the page in database" +

  "and clear any cached collection of pages for the user who gets the new page" +

  "and it returns the newly inserted page").Assert(() =>

  {

  database.VerifyAll();

  cache.VerifyAll();

  Assert.Equal(pageId, page.ID);

  });

  }

  首先,我们将写一些虚拟代码PageRepository.Insert方法,返回一个新的Page。它应该会fail,因为它不满足目前数据库对象的期望集。如果没有失败,则表明我们的测试是错误的。

  public Page Insert(Action populate)

  {

  return new Page();

  }

  运行故障测试结果如预期:

  TestCase 'Given PageRepository when InsertPage is called, then it should insert the

  page in databaseand clear any cached collection of pages for the user who gets the

  new pageand it returns the newly inserted page'

  failed: Moq.MockVerificationException : The following expectations were not met:

  IDropthingsDataContext d => d.Insert(Page, null)

  at Moq.Mock`1.VerifyAll()

  PageRepositoryTest.cs(278,0): at

  Dropthings.DataAccess.UnitTest.PageRepositoryTest.<>c__DisplayClass35.

  b__34()

  这表明,没有呼叫database.Insert ,所以测试失败。我们实现了TDD的第一步,这是写一个测试并使其失败以来的第一期望没有正确组件下检验。

原文转自:http://www.codeproject.com/Articles/44276/Unit-Testing-and-Integration-Testing-in-Business-A