标签: tdd

如何在复杂系统中使用TDD?

所以我一直在制作一款我想尝试TDD的游戏,所以我的大部分工作代码都没有任何测试,但我想为每个新功能尝试TDD.

我的问题是我的游戏包含大量相互依赖的系统(有点像我不能在没有关卡的情况下使用相机,对象保留大量引用并初始化事物将其他事物作为参数).因此,为了测试雾系统,我需要初始化水平,物理,相机,碰撞(因为它们在某种程度上相互依赖)并且产生大量重复.这是代码:

test( "shadow test", function() {
    var b2world=new b2World(new b2Vec2(0, 0), false);
    var contactListener = new collisionHandler.CollisionHandler(MASK_BITS);
    b2world.SetContactListener(contactListener);

    var map = gamejs.http.load('images/prot8.json');
    var level = new Level.Level({
        map: map, 
        size: 0.5, 
        nMaskBits: MASK_BITS.node,
        nCategoryBits: MASK_BITS.player | MASK_BITS.birdy | MASK_BITS.innerBody,
        world: b2world,
        scale: SCALE});

    var cam = new Camera.Camera({
            lvlWid: this.level.width*SCALE*this.level.blockSize, 
            lvlHei: this.level.height*SCALE*this.level.blockSize, 
            yBand: 2,
            maxSpeed: 20,
            peerWindow: new b2Vec2(350, 300),
            scrWid: scrWid, 
            scrHei: scrHei});

    var shadow = new Shadow.Shadow({
        width : 300,
        height : 300,
        level : level,
        eye …
Run Code Online (Sandbox Code Playgroud)

javascript tdd

0
推荐指数
1
解决办法
153
查看次数

关于如何使用Rspec和Cucumber进行TDD/BDD的真实示例

我发现它并不像人们想象的那样容易在Rails中开始使用TDD.我搜索了一些例子,但没有人真正解释如何用Rspec和黄瓜做TDD/BDD.他们通常使用旧版本的rspec,或者更喜欢使用另一种版本(因此你会发现黄瓜测试和rspec测试分开).顺便说一下该做什么,但真正的过程通常根本没有解释(我已经阅读了很多关于让它们与Capybara一起工作,但只有一次关于如何继续使用它们的bdd).

我想知道如何使用它们,如何避免测试重复(禁用视图规范和其他应该用黄瓜完成的测试),以及可能解释什么不测试(例如我觉得它无用于测试在大多数情况下,HTML输出可以用于测试您是否登录以匹配您所看到的内容,例如flash消息.

您能否提供一份有关如何使用这两种工具进行BDD处理的逐步列表?这将是一个很好的新教程(使用最新版本)或可能是一个截屏视频.

谢谢.

tdd bdd cucumber rspec2 ruby-on-rails-3

0
推荐指数
1
解决办法
511
查看次数

在Brownfield开发中工作时,TypeMock是唯一的解决方案吗?

我正在开始一个维护项目,我需要使用遗留代码并创建新代码.新的我可以创建适当的基于接口的开发,我可以使用Moq进行适当的单元测试.我不能将Moq用于遗留代码,因为他们没有适当的编码来模拟对象.根据阅读,Typemock看起来非常合适,因为我可以隔离对象并在遗留对象上调用方法时返回我们想要的内容.我非常喜欢简单易用的开发.我想知道是否有任何其他工具像Typemock我应该在承诺之前看一下,因为我必须付钱.

谢谢

PS:我们的是微软商店,我们使用C#/ ASP/ASp.Net/Silverlight和VB.Net

**我刚刚发现Infragistics也有一个模拟工具.

tdd nunit moq typemock

0
推荐指数
1
解决办法
178
查看次数

如何在Windows 07 64位中使用composer安装PHPUnit?

我有Windows 07 64位操作系统,我已经下载了作曲家以及我正在运行wampserver wampserver2.2e-php5.3.13-httpd2.2.22-mysql5.5.24-x64.exe.我曾尝试使用composer安装PHPUnit但不能.我在linux/mac os上找到了安装步骤,但在windows中找不到.有些网站建议在php项目的composer.json文件中添加对phpunit/phpunit的依赖.但是怎么样?我不知道.请帮助我在wampserver(Windows 07-64位操作系统)或任何替代品上使用composer安装PHPUnit.

tdd phpunit

0
推荐指数
1
解决办法
5038
查看次数

如何测试是否所有子类都已经过测试

所以我不记得为我创建的新类进行单元测试.我尽力坚持TDD,但有时我会忘记.我很擅长运行测试(因为它只是一个按钮)所以有一种方法可以扫描所有类的命名空间,并检查它们是否来自已知的类.

例如.我有一个Contact课程.我有3个子类联系(运输,计费,服务)我有一个单元测试所有3.让我们说从现在起一个月我决定从联系人派出另一个班级.我非常擅长记得运行我的单元测试,但在这种情况下,我希望它只能通过1次测试来提醒我为我的新联系类编写单元测试.就像是.

    [TestMethod, TestCategory("Contact")]
    public void TestAllContactsAccountedFor()
    {
        foreach(class c in theNamespace)
        {
            bool subclassOfContact = c is  Contact;
            if (subclassOfContact)
            {
                bool knownSubclass = (c is CustomerShippingContact) || (c is CustomerBillingContact) || (c is CustomerServiceContact);
                Assert.IsTrue(knownSubclass);

            }

        }
    }
Run Code Online (Sandbox Code Playgroud)

这样,如果我忘记进行测试,它将无法通过此测试,然后我会考虑它.有什么想法吗?

c# tdd unit-testing class subclass

0
推荐指数
1
解决办法
136
查看次数

重复测试用例

我的问题是,是否可以针对每种情况重复相同的测试断言或案例?

这里的场景是如果我有一个函数,那么可以使用涉及不同参数组合的不同场景来模拟该函数.

例如,我有一个具有3种可能场景的函数,在每个场景中,每次在此函数上模拟此场景时,会发生3个类似事件.

当我为场景A编写测试时,我将编写3个断言来测试此场景中涉及的3个事件.是否可以为其他场景重复相同的断言模式?

断言可能不一定相同,但它们具有相同的模式.

我希望有人会理解我的意思,我知道这太笼统了,因为我想要一个普遍的立场,如果这在大多数情况下确实有些适用.

testing tdd unit-testing

0
推荐指数
2
解决办法
175
查看次数

正确的例外测试方法

我在一个80%简单逻辑和20%复杂逻辑的项目上做TDD.如果certaing方法抛出错误并想知道正确的方法,我发现自己经常测试.我使用NUnit和JustMock.

我有两种方法可以做到这一点.使用ExpectedException属性,并指定类型.或写作如下.写下面的专业人员是我也可以断言exception.message(如果我已经自定义了),如果测试失败,我也会得到例外消息.但是我想和别人一起检查你是怎么做的.总结一下:

  1. 对这样的异常进行大量测试是否正常?
  2. 这是正确的方法:

只是解释:供应商提供某些合同,部门接受一份合同但不能与同一供应商签订一份以上的合同(但是cource可以与不同的供应商签订不同的合同)

    [Test]
    public void Accepting_more_than_one_contract_from_supplier_throws_exception()
    {
        //Arrange
        var department = new Department(Guid.NewGuid(), "1234");
        var supplier = Mock.Create<Supplier>();
        var contract1 = Mock.Create<DeliveryContract>();
        var contract2 = Mock.Create<DeliveryContract>();
        var id = Guid.NewGuid();
        supplier.Arrange(x => x.Id).Returns(id);
        contract1.Arrange(x => x.Supplier).Returns(supplier);
        contract2.Arrange(x => x.Supplier).Returns(supplier);

        //Act
        department.AcceptContract(contract1);

        //Assert
        try
        {
            department.AcceptContract(contract2);
            Assert.Fail("Duplicate contract with supplier did not throw an exception");
        }
        catch (Exception ex)
        {   
            Assert.AreEqual(typeof(ArgumentException),ex.GetType(),ex.Message);
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# tdd nunit unit-testing domain-driven-design

0
推荐指数
1
解决办法
1133
查看次数

用rspec测试Perl?

好吧,这可能听起来很疯狂,但是可以用rspec来测试perl类吗?我想要的原因是因为我工作的所有生产代码必须是Perl.但我正在学习红宝石,最终会让perl落后.

我知道Test :: Expectation,一个基于rspec的perl测试框架.

但遗憾的是,我们不做第一次测试开发.我想每天都这样做,但是使用rspec.

可能?

ruby tdd perl rspec

0
推荐指数
1
解决办法
204
查看次数

从TDD开始可以测试为绿色吗?

想象一下我有功能foo():

var foo = function(string) {
    return string.replace(/a/g, '');
};
Run Code Online (Sandbox Code Playgroud)

我有以下测试工作:

  1. foo() 存在;
  2. foo()a从字符串中删除条带,没有字符串就没有字符串a;
  3. foo()TypeError如果给出别的东西而不是字符串则抛出;

问题在于测试#3 - 但它从一开始就是绿色,这不是我的优点.我希望写下这样的东西:

var foo = function(string) {
    if (typeof string !== 'string') {
        throw new TypeError('argument should be a string');
    }

    return string.replace(/a/g, '');
};
Run Code Online (Sandbox Code Playgroud)

但我不能,因为没有测试.所以foo()真的抛出TypeError,但不是因为错误类型的参数,而是因为null,undefined,number,array,boolean,regexp等作为参数给出的对象不提供replace()方法.

我想我需要这个测试,只是因为JS团队可能会TypeError将此特定情况更改为类似的情况MissingMethodError,但我会违反Red> Green> Refactor原则.我该如何解决这种情况?

javascript testing tdd methodology unit-testing

0
推荐指数
1
解决办法
70
查看次数

我如何为这样的东西编写单元测试?

所以我知道TDD你应该首先编写测试但我无法理解如何为下面的代码编写测试.有人可以在起点帮助我吗?

private string GetWMIProperty(string property)
{
    string value = string.Empty;
    SelectQuery selectQuery = new SelectQuery("Win32_OperatingSystem");
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery))
    {

        foreach (ManagementObject mo in searcher.Get())
        {
             value = mo[property].ToString();
        }
    }
    return value;
}
Run Code Online (Sandbox Code Playgroud)

c# tdd

0
推荐指数
1
解决办法
281
查看次数