标签: tdd

什么不测试单元测试?

项目编写单元测试的哪些部分几乎或几乎不可能?数据访问?FTP?

如果对这个问题有答案,那么%100的报道就是一个神话,不是吗?

language-agnostic tdd unit-testing testing-strategies

33
推荐指数
4
解决办法
5210
查看次数

在为.Net选择模拟框架时,我应该考虑什么

.Net有很多模拟框架.没有明显的赢家在各方面都取代了其他人.领先的嘲讽框架也有很多不同风格的用法.

学习所有模拟框架以确定使用哪个框架所花费的时间是不合理的.我不相信我们已经达到了可以讨论最好的模拟框架的阶段.那么在特定情况下,我应该问什么问题,关于项目和关于我自己,以帮助决定使用的最佳模拟框架?

知道为什么选择当前使用的模拟框架以及您是否仍然对该选择感到满意也是有用的.

在比较模拟框架的样式时是否有一个有用的词汇表?

(注意:我把这个问题限制在.Net,因为Java没有属性或lambda表达式,所以我希望模拟框架可以更好地用于.Net然后Java)

截至目前的摘要:

  • 如果你需要模拟静态方法,或者没有虚拟方法,那么唯一合理的选择是TypeMock,但是它不是免费的,并不会促使你走向一个好的设计.
  • 如果你正在做TDD,那么Rhino Mocks是一个非常好的选择,例如你想要模拟实现接口的对象.目前它似乎是"市场领导者"
  • 如果您使用.NET 3.5,则应考虑使用Moq(简介)Moq 可能会获得Rhino Mocks用于新项目

我从这个总结中错过了什么?

那么,如果您使用的是.NET 3.5,那么推动Rhino MocksMoq之间的选择又是什么呢?


也可以看看:

" 在为.NET选择依赖注入框架时,我应该考虑什么?"也可能有问题,因为它询问问题的"另一面".

.net tdd unit-testing mocking

33
推荐指数
4
解决办法
5387
查看次数

单元测试工厂方法,具有作为返回类型的具体类

所以我有一个工厂类,我正在尝试研究单元测试应该做什么.从这个问题我可以验证返回的接口是我期望的特定具体类型.

如果工厂返回具体类型,我应该检查什么(因为目前不需要使用接口)?目前我做的事情如下:

[Test]
public void CreateSomeClassWithDependencies()
{
    // m_factory is instantiated in the SetUp method
    var someClass = m_factory.CreateSomeClassWithDependencies();

    Assert.IsNotNull(someClass);
}
Run Code Online (Sandbox Code Playgroud)

这个问题是Assert.IsNotNull看起来有点多余.

另外,我的工厂方法可能正在设置该特定类的依赖关系,如下所示:

public SomeClass CreateSomeClassWithDependencies()
{
    return new SomeClass(CreateADependency(), CreateAnotherDependency(),
                         CreateAThirdDependency());
}
Run Code Online (Sandbox Code Playgroud)

我想确保我的工厂方法正确设置所有这些依赖项.有没有其他方法可以做到这一点来制作那些public/internal我在单元测试中检查的依赖属性?(我不是修改测试对象以适应测试的忠实粉丝)

编辑:回应罗伯特哈维的问题,我正在使用NUnit作为我的单元测试框架(但我不会认为它会产生太多差异)

tdd unit-testing factory

33
推荐指数
2
解决办法
2万
查看次数

为什么使用集成测试而不是单元测试是一个坏主意?

让我从定义开始:

单元测试是一种软件验证和验证方法,程序员在其中测试各个源代码单元是否适合使用

集成测试是软件测试的活动,其中各个软件模块组合在一起并作为一组进行测试.

虽然它们经常用于不同的目的但这些术语是混合的.开发人员将自动集成测试称为单元测试.还有一些人认为哪一个更好,在我看来这根本就是一个错误的问题.

我想请求开发社区分享他们为什么自动集成测试无法取代经典单元测试的意见.

以下是我自己的观察:

  1. 集成测试不能与TDD方法一起使用
  2. 集成测试很慢,无法经常执行
  3. 在大多数情况下,集成测试并不表明问题的根源
  4. 使用集成测试创建测试环境更加困难
  5. 确保高覆盖率(例如模拟特殊情况,意外故障等)更加困难
  6. 集成测试不能与基于交互的测试一起使用
  7. 集成测试进一步发现缺陷的时刻(来自paxdiablo)

编辑:再次澄清:问题不在于是否使用集成或单元测试,而是关于哪一个更有用.基本上我想收集开发团队的参数,这些团队只编写集成测试并将它们视为单元测试.涉及来自不同层的组件的任何测试都被视为集成测试.这是与单元测试相比较,其中隔离是主要目标.

谢谢,安德烈

tdd integration-testing unit-testing

33
推荐指数
6
解决办法
8805
查看次数

一种旨在测试的编程语言

是否存在可通过设计测试的编程语言,或者至少在可测试性方面表现出非常好的属性?

例如,设计的编程语言使得单元测试是编码过程的非可选部分,或者更好的是编程语言,其中程序或多或少地从单元测试中推断出来.

或者,如果您更喜欢扭曲问题,那么命令式编程是不好的做法还是不必要的以确保可测试性?

面向对象编程怎么样?像依赖注入和模拟库这样的东西真的有助于TDD,这些实践不会因为成为语言设计的一部分而受益吗?我一直在寻找具有丰富元模型的语言,倾向于允许使用目标语言编写类似DSL的API.这些库是建立在这之上的,为什么不把这些东西放到语言本身?

我发现詹姆斯布莱克引用的博客文章非常好.

不久前,我反思了过去十年的测试习惯,并提出了一些有趣的观察:

  • 我觉得有必要为我经常编写的代码编写测试.
  • 与往常一样,这种需求受到环境限制的阻碍,所以我最终没有编写这些测试.

您是否同意动态编程语言使编写测试更容易的说法?

tdd programming-languages

33
推荐指数
6
解决办法
3467
查看次数

显示每个rspec示例的运行时

目前我正在运行超过1k的例子,这需要很长时间才能完成(超过20分钟!!!).

我想确定哪些示例需要花费更多时间才能完成,是否有任何方法可以运行rspec并返回每个示例完成(单独)所需的时间?我正在使用rspec 1.3.0rspec-rails 1.2.3

tdd rspec ruby-on-rails rspec-rails

33
推荐指数
1
解决办法
7907
查看次数

Moq - mock.Raise应该在没有安装程序的情况下在测试单元中引发事件

我有一个演示者类,它附加了注入视图的事件.现在我想测试演示者对事件的正确反应.

这是视图界面IView:

public interface IView 
{
    event EventHandler MyEvent;
    void UpdateView(string test);
}
Run Code Online (Sandbox Code Playgroud)

这是实现IView的视图

public partial class MyView : IView
{
    public event EventHandler MyEvent;

    public MyView()
    {
        this.combo.SelectedIndexChanged += this.OnSelectedIndexChanged;
    }

    public void UpdateView(string test)
    {
        this.textBox.Text = test;
    }

    private OnSelectedIndexChanged(Object sender, EventArgs e)
    {
        if (this.MyEvent != null)
        {
            this.MyEvent(sender, e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是受测试的主持人:

public class MyPresenter
{
    private IView _view;
    public MyPresenter(IView view)
    {
        this._view = view;
        this._view.MyEvent += this.OnMyEvent;
    }

    private void OnMyEvent(Object sender, …
Run Code Online (Sandbox Code Playgroud)

c# tdd moq

33
推荐指数
1
解决办法
4万
查看次数

如何在javascript中模拟文件?

我正在开发一些小项目来锻炼我的TDD技能.该项目包括一个音频播放器,它能够拖放播放列表中的文件.我正在使用Jasmine作为测试框架.我遇到的问题是我无法模拟javascript文件来测试我的文件上传功能.我试图像这样创建一个文件:

new File(new Blob(), "name");
Run Code Online (Sandbox Code Playgroud)

但Chrome不允许手动创建文件.File的构造函数是非法的.我找到了一个grunt.js的解决方案,它包含从grunt返回一些文件,但我真的不想在服务器端使用这么小的测试项目.这个问题有解决方法吗?

javascript tdd html5 unit-testing jasmine

33
推荐指数
2
解决办法
2万
查看次数

如何在纯Ruby(没有Rails)中使用Capybara?

我试图让Capybara运行在一个简单的Ruby脚本中 - 即没有/在Rails之外.这是脚本:

require 'rubygems'
require 'capybara'
require 'capybara/dsl'

include Capybara

Capybara.current_driver = :selenium
Capybara.app_host = 'http://www.google.com'

visit('/')
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行这个时,我收到此错误:

NameError: uninitialized constant Capybara::Session

at top level    in dsl.rb at line 52
method gem_original_require in custom_require.rb at line 36
method require  in custom_require.rb at line 36
at top level    in capybara_test.rb at line 3
method gem_original_require in custom_require.rb at line 31
method require  in custom_require.rb at line 31
at top level    in capybara_test.rb at line 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

更多信息:

  • Mac OS X 10.5 …

ruby testing tdd capybara

32
推荐指数
2
解决办法
1万
查看次数

如何在VS 2012 Professional RC中添加假货组件?

根据以下关于VS 2012和Microsoft Fakes Test Framework的两篇文章,我应该能够在我的测试项目的参考资料中右键单击一个程序集并选择"Add Fakes Assembly"来在Visual Studio 11中创建一个新的Microsoft Fakes Framework程序集但是我没有在VS 2012 RC Professional中找到它应该存在的上下文菜单项.我可能需要引用Microsoft.QualityTools.Testing.Fakes程序集,但我也无法在添加引用搜索中找到它.自beta以来所需的菜单是否已更改?我需要安装扩展程序吗?

如何在VS 2012 Professional RC中添加假货组件?

参考文章:

c# tdd microsoft-fakes visual-studio-2012

32
推荐指数
1
解决办法
3万
查看次数