Junit 黄瓜和杜松子有什么不同?

Junit 黄瓜和杜松子有什么不同?,junit,cucumber,Junit,Cucumber,谁能给我解释一下和之间的区别吗 据我所知,它们都是用来测试Java代码的,尽管我不确定它们之间的区别 它们只是同一测试套件的不同实现,还是旨在测试不同的东西?Cucumber是您可以进行BDD行为驱动开发的工具。您可以将功能用例转换为Cumber故事。从这个意义上讲,您还可以将Cucumber作为DSL,用于功能用例文档 另一方面,JUnit用于单元测试,这将是Java中的一种方法。因此,可以使用单元测试(尽管很少)进行集成测试或完整系统测试,这是您的第一个案例。单元测试将只是单元测试。我认为C

谁能给我解释一下和之间的区别吗

据我所知,它们都是用来测试Java代码的,尽管我不确定它们之间的区别


它们只是同一测试套件的不同实现,还是旨在测试不同的东西?

Cucumber是您可以进行BDD行为驱动开发的工具。您可以将功能用例转换为Cumber故事。从这个意义上讲,您还可以将Cucumber作为DSL,用于功能用例文档


另一方面,JUnit用于单元测试,这将是Java中的一种方法。因此,可以使用单元测试(尽管很少)进行集成测试或完整系统测试,这是您的第一个案例。单元测试将只是单元测试。

我认为Cucumber更多地用于集成测试,而JUnit更多地用于行为测试。此外,Cucumber语法比JUnit更精确,但要复杂得多。这里您可以看到一个Cucumber测试示例:

package com.c0deattack.cucumberjvmtutorial;

import cucumber.annotation.en.Given;
import cucumber.annotation.en.Then;
import cucumber.annotation.en.When;
import cucumber.runtime.PendingException;

public class DepositStepDefinitions {

    @Given("^a User has no money in their account$")
    public void a_User_has_no_money_in_their_current_account() {
        User user = new User();
        Account account = new Account();
        user.setAccount(account);
    }

    @When("^£(\\d+) is deposited in to the account$")
    public void £_is_deposited_in_to_the_account(int arg1) {
        // Express the Regexp above with the code you wish you had
        throw new PendingException();
    }

    @Then("^the balance should be £(\\d+)$")
    public void the_balance_should_be_£(int arg1) {
        // Express the Regexp above with the code you wish you had
        throw new PendingException();
    }

    private class User {
        private Account account;

        public void setAccount(Account account) {
            this.account = account;
        }
    }

    private class Account {
    }
}
您可以看到JUnit更简单,但不一定没有那么强大:

import static org.junit.Assert.assertEquals;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class MyClassTest {

  @Test(expected = IllegalArgumentException.class)
  public void testExceptionIsThrown() {
    MyClass tester = new MyClass();
    tester.multiply(1000, 5);
  }

  @Test
  public void testMultiply() {
    MyClass tester = new MyClass();
    assertEquals("10 x 5 must be 50", 50, tester.multiply(10, 5));
  }
} 
希望有帮助


克莱门西奥·莫拉莱斯·卢卡斯。

黄瓜和朱尼特是不同的,解决不同的问题

Cucumber是一个行为驱动设计(BDD)框架,它接受用人类可读的语言(如英语)编写的“故事”或场景,并将这些人类可读的文本转换为软件测试

下面是一个黄瓜故事的例子:

cucumber将知道如何将此文本转换为软件测试,以确保软件按所述方式工作。输出将告诉您故事是否真的是软件所做的,如果不是,则说明有什么不同:

下面是修复代码以使cucumber测试通过的地方:

这就是所谓的“可执行规范”,它是记录软件支持的所有功能的好方法。这与普通文档不同,因为没有相应的测试,阅读文档的人不知道文档是否是最新的

可执行规范的其他好处:

  • 非程序员可以阅读和理解测试
  • 非程序员可以编写测试,因为它们是纯英语的
BDD结果和可执行规范的级别非常高。它们涵盖了整个特性,可能还有一些边缘情况作为示例,但没有测试所有可能的条件或每个代码路径。BDD测试也是“集成测试”,因为它们测试您的所有代码模块如何协同工作,但它们并没有彻底测试所有内容

这就是JUnit的用武之地

JUnit是一个较低级别的“单元测试”工具,它允许开发人员测试代码中所有可能的代码路径。代码的每个模块(或类,甚至方法)都是单独测试的。它比BDD框架低得多。使用与Cucumber示例相同的计算器故事,JUnit测试将测试大量不同的计算示例和无效输入,以确保程序正确响应并正确计算值


希望这有助于

让3名选民感到羞耻!对于刚接触cucumber和testunit的人来说,这是一个非常有效的问题。+1,“BDD测试也是“集成测试”,因为它们测试所有代码模块是如何协同工作的,但它们不能彻底测试所有内容”,非常有帮助的解释