答案 0 :(得分:22)
Cucumber和JUnit是不同的,可以解决不同的问题。
Cucumber是一个行为驱动设计(BDD)框架,它采用"故事"或者用人类可读语言(如英语)编写的场景,并将这些人类可读的文本转换为软件测试。
这是一个例子黄瓜故事:
黄瓜将知道如何将此文本转换为软件测试,以确保软件按照描述的方式工作。输出将告诉您故事是否实际上是软件的功能,如果不是,那么会有什么不同:
这里修复了代码以使黄瓜测试通过:
这就是所谓的"可执行规范"这是记录软件支持的所有功能的好方法。这与普通文档不同,因为没有相应的测试,阅读文档的人不知道文档是否是最新的。
可执行规范的其他好处:
BDD结果和可执行规范非常高。它们涵盖了整体功能,可能还有一些边缘情况作为示例,但不测试每个可能的条件或每个代码路径。 BDD测试也是"集成测试"因为他们会测试你的所有代码模块是如何协同工作的,但是他们并没有彻底地测试所有代码。
这就是JUnit的用武之地。
JUnit是一个较低级别的单元测试"允许开发人员在其代码中测试每个可能的代码路径的工具。您的代码(或类,甚至方法)的每个模块都是独立测试的。它比BDD框架低得多。使用与Cucumber示例相同的计算器故事,JUnit测试将测试许多不同的计算示例和无效输入,以确保程序正确响应并正确计算值。
希望有所帮助
答案 1 :(得分:1)
我认为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));
}
}
希望它有所帮助,
Clemencio Morales Lucas。
答案 2 :(得分:0)
黄瓜可以在其中进行BDD行为驱动开发。像你这样的东西可以将你的功能用例转换成Cucumber的故事。从这个意义上讲,您还可以将Cucumber作为功能用例文档的DSL。
另一方面,JUnit用于单元测试,这将是Java中的一种方法。因此,使用可以进行单元测试(很少)进行进行测试或完整系统测试,这是您的第一个案例Cucumber。单元测试仅为单元测试。