【问题标题】:First time unit testing (in silverlight)第一次单元测试(在 Silverlight 中)
【发布时间】:2010-06-07 22:24:38
【问题描述】:

您好,我搜索了其他一些帖子,但大多数都认为人们知道他们在单元测试中所做的事情,坦率地说我不知道​​。我看到了单元测试背后的想法,我现在正在盲目地编写一个 Silverlight 应用程序,我想编写一些单元测试以确保我走在正确的道路上。我希望能够使用 SL4 vs 2010 silverlight 单元测试项目模板,以保持简单且不使用外部工具。所以我需要回答的问题是:

单元测试的方法有哪些? 单元测试和自动化单元测试有什么区别? 如何在 Silverlight 中进行有意义的单元测试? 单元测试(在 Silverlight 中)时我应该注意什么?

我还应该在我的 silverlight 应用程序中实现某种 IRepository 模式以简化单元测试吗?

编辑:

我会在这里发布有用的链接,因为我会一路探索:

在 Silverlight 中实现 MVVM - http://community.infragistics.com/pixel8/media/p/91949.aspx

Mix10 MVVM 谈话 - http://live.visitmix.com/MIX10/Sessions/EX14

对 Ria 应用程序进行单元测试 - http://blogs.msdn.com/b/vijayu/archive/2009/06/08/unit-testing-business-logic-in-net-ria-services.aspx

PK的好资源:http://dotenetscribbles.blogspot.com/2009/12/unit-testing-dependency-injection-and.html

【问题讨论】:

  • +1。对于我们这些不知道如何进行单元测试的人来说,这是一个很好的问题。

标签: silverlight unit-testing


【解决方案1】:

我从未使用过silverlight 单元测试项目模板。我只使用 nunit 在 Silverlight 中进行单元测试。所以,我将把它留给其他人来回答。 至于您的其他问题:

单元测试应该推动您的设计。您的单元测试是您的代码的第一批用户。您的代码基于一些期望,单元测试验证是否满足期望。使用 MVVM 模式(就像您使用 silverlight 一样)有助于单元测试。要记住的最重要的事情是您必须编写可测试的代码。而要编写可测试的代码,最重要的是要记住注入依赖项。例如,如果您的代码调用 db.您不能让单元测试调用数据库。相反,您将模拟您的数据访问层。这就是模拟和存根等概念出现的地方。我在我的 sivlerlight 单元测试中使用 moq 进行模拟。我认为有助于单元测试的另一件重要的事情是单一责任原则。最后,将您的测试代码视为生产代码,否则您的测试可能会给您一个错误的概念,即期望得到满足。您的单元测试是代码,因此可能存在错误。

单位之间有什么区别 测试和自动化单元测试?

我不太清楚你的意思是什么。单元测试是白盒测试的一种自动化方式。每次签入存储库中的任何代码时,您都可以拥有运行所有单元测试的脚本。这可以是持续集成的一部分。

我如何进行有意义的单元测试 银光

在 silverlight 中,为了方便测试,您应该使用命令,而不是在代码隐藏文件中编写代码。这允许您在单元测试时模拟按钮单击和其他 GUI 事件。使用 MVVM 模式和命令,您可以测试所有 C# 代码(不是 xaml),直到 UI(转换器、VM 等)。

很难在这个答案中提及所有内容。我建议,你用谷歌搜索 MVVM,Silverlight 中的命令,Martin fowler - mock 不是存根,silverlight 的模拟框架,依赖注入

【讨论】:

  • 我希望您可以在不对应用程序进行重大更改的情况下实现某些功能。即我看到这个: public IQueryable GetAspnet_Users() { return this.DataContext.aspnet_Users;我注意到返回是 this.DataContext.aspnet_Users,所以没有办法用某种模拟数据库切换数据上下文,然后在我的测试类中运行域服务方法吗?我的意思是,在我未经训练的眼里,我会有类似这样的东西。DataContext = MockDBStructure; MockDBStructure : IDBStructure 不可能吗?
  • @Jakob。模拟 IDBStructure 实现是非常有可能的。因此,我假设您将 DataContext 作为依赖项接收,或者注入具有 GetAspnet_Users() 方法(实现某些接口)的类实例(通过 ctor/property/method 传递)。
  • @PK。目前包含 GetAspnet_Users() 方法的 DomainService 被定义为公共类 DomainService : LinqToSqlDomainService 所以我不太确定如何交换数据上下文,以获得一些 IRepository 模式实现以方便单元测试
  • DomainService 类应该实现一些接口,比如 IDomainService,它将作为其客户的合同。它将具有 GetMethods,例如 GetAspnet_Users()。其他层中的类将具有 ctor 参数,类似于 OtherLayer(IDomainService){...}。当您在其他层测试类时,您必须模拟 IDomainService 并将该对象传递给被测类
  • @PK - 感谢您坚持回答我的问题 :) 我一定没有得到任何东西。如果我必须模拟域服务,我将不得不在模拟域服务中编写与实际域服务中的方法类似且不完全相同的方法,这让我思考——除了模拟域服务的输出之外,我在测试什么。从我的角度来看,对我的本地数据库进行测试实际上看起来比使用该解决方案更有吸引力,因为这样我至少会测试真实数据和真实的域服务方法。你能推断出我没有得到什么吗?
猜你喜欢
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
相关资源
最近更新 更多