±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÈçºÎ´î½¨Cucumber¿ò¼Ü£¬ÒÔ¼°Cucumber¸÷ÎļþµÄ×÷Ó㬺Ϳò¼ÜµÄÐ޸ģ¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£ |
|
Cucumber½éÉÜ
CucumberÊÇÒ»¸öÖ§³ÖBDD£¨Behavior Driven Development£©,¼´ÐÐΪÇý¶¯¿ª·¢µÄ×Ô¶¯»¯²âÊÔ¿ò¼Ü¡£ÔÚ½øÐе¥Ôª²âÊÔ»òÕß¼¯³É²âÊÔ֮ǰ£¬ÊÂÏȽ«²âÊԵIJ½ÖèºÍÑéÖ¤ÐÅÏ¢ÓÃͨÓõÄÓïÑÔ£¨Ó¢Ó¶¨ÒåºÃ£¬Ê¹µÃ²âÊԵIJ½Öè¡¢µ¥Ôª²âÊԺͼ¯³É²âÊÔÿһ²½Ö´ÐеÄÄ¿µÄÄܱ»·Ç¿ª·¢ÈËÔ±¶Á¶®£¬²¢ÇÒдµ¥Ôª²âÊԺͼ¯³É²âÊÔµÄÈËÔ±¿ÉÒÔÒÀ¾ÝÊÂÏÈдºÃµÄ¿ò¼Ü½øÐдúÂëµÄ±àд£¬´ïµ½ÐÐΪÇý¶¯¿ª·¢µÄÄ¿µÄ¡£
Cucumber¿ò¼ÜµÄ´î½¨
1. ½«Cucumber²å¼þµ¼ÈëeclipseÖУ¬´Ë´¦Í¬ÆäËû²å¼þµ¼Èë·½·¨Ïàͬ£¬²»×÷˵Ã÷¡£
2. н¨Java¹¤³Ì£¬½«CucumberËùÐèÒªµÄjar°üµ¼ÈëJava¹¤³ÌÖУ¨×îºÃн¨Ò»¸öÎļþ¼Ð£¬½«jar°ü·Åµ½¸ÃÎļþ¼ÐÏ£©¡£


3.ͨ¹ýBuild PathÌí¼Ó¸Õµ¼ÈëµÄJARs




4. н¨ÓÃÀ´¶¨Òå²½ÖèµÄfeature¸ñʽµÄÎļþ£¬Ð½¨µÄfeature¸ñʽÎļþ»á×Ô¶¯Ìîдģ°åÎļþ£¬¾ßÌåʹÓ÷½·¨ºóÐøËµÃ÷¡£Í¬ÉÏ£¬×îºÃ½«Æä·ÅÔÚÌØ¶¨µÄÎļþ¼ÐÀ±¾ÀýΪFeatureÎļþ¼Ð¡£



5. ½«±»²âÊԵİüµ¼ÈëJava¹¤³ÌÖУ¬±¾Àý²âÊÔÒ»¸ö¼òµ¥µÄCalculatorÀà¡£

6. н¨Ò»¸ö°ü£¬°üÃû±ØÐëΪtest.java»òmain.java·ñÔòºóÐø´´½¨Cucumber¶¨Òå²½Öèʱ»á³ö´í¡£
7. ÔÚtest.java°üÖÐн¨Ò»¸öStep-Definition class¡£



Cucumber¿ò¼ÜÏà¹ØÎļþ¼°ÆäÄÚÈݵÄ˵Ã÷
1. .featureÎļþ
¶¨ÒåÁ˲âÊԵIJ½Ö裬°üÀ¨ÒÔϼ¸¸ö¹Ø¼ü×Ö
Feature£ºÒ»¸ö.featureÎļþÓÐÇÒ½öÓÐÒ»¸öFeature¹Ø¼ü×Ö¡£ÃèÊöÒª²âÊԵĶÔÏó£¬Ò»°ãΪ²âÊÔ±êÌâ¡£
Scenario£ºÒ»¸ö.featureÎļþ¿ÉÒÔÓÐ0¸ö»ò¶à¸öScenario¹Ø¼ü×Ö¡£²âÊÔ¶ÔÏóµÄ³¡¾°£¬Èç²âÊÔAdd(
)·½·¨£¬¿ÉÒÔÓÐÁ½¸öÕûÊýÏà¼ÓºÍÁ½¸ö¸ºÊýÏà¼ÓµÈ¶àÖÖ³¡¾°¡£
Given£ºÒ»¸ö.featureÎļþÓÐÇÒ½öÓÐÒ»¸öGiven¹Ø¼ü×Ö¡£Ï൱ÓÚ²âÊÔÓÃÀýÖеÄÔ¤ÖÃÌõ¼þ¡£ÈçÏëÒª±í´ï¶à¸öÔ¤ÖÃÌõ¼þ£¬¿ÉÒÔͨ¹ýAnd¹Ø¼ü×ÖÌí¼Ó¡£
When£ºÒ»¸ö.featureÎļþÓÐÇÒ½öÓÐÒ»¸öWhen¹Ø¼ü×Ö¡£¾ßÌåµÄ²Ù×÷²½Ö裬ÀàËÆÓÚ²âÊÔÓÃÀýÖеIJÙ×÷²½Öè¡£ÈçÏëÒª±í´ï¶à¸ö²Ù×÷²½Ö裬¿ÉÒÔͨ¹ýAnd¹Ø¼ü×ÖÌí¼Ó¡£
Then£ºÒ»¸ö.featureÎļþÓÐÇÒ½öÓÐÒ»¸öThen¹Ø¼ü×Ö¡£Ï൱ÓÚ²âÊÔÓÃÀýµÄÖеÄÔ¤ÆÚ½á¹û¡£ÈçÏëÒª±í´ï¶à¸öÔ¤ÆÚ½á¹û£¬¿ÉÒÔͨ¹ýAnd¹Ø¼ü×ÖÌí¼Ó¡£
And£ºÒ»¸ö.featureÎļþ¿ÉÒÔÓÐ0¸ö»ò¶à¸öAnd¹Ø¼ü×Ö¡£AndÔªËØ¿ÉÒÔ²¹³ä¶îÍâµÄÔ¤ÖÃÌõ¼þ»ò²Ù×÷²½Öè¡£
But£ºÒ»¸ö.featureÎļþ¿ÉÒÔÓÐ0¸ö»ò¶à¸öBut¹Ø¼ü×Ö¡£ButºÍAndÒ»Ñù£¬¿ÉÒÔͬGiven¡¢When¡¢ThenÁ¬Óã¬ÓÃÓÚÌí¼Ó·ñ¶¨ÀàÐ͵ÄÃèÊö£¬Ò»°ãÖ»ÊÊÓÃÓÚ¸ºÃæÌõ¼þ¡£±ÈÈ磺
THEN login should be successful.
BUT home page should not be missing
Scenario Outline£ºÒ»¸ö.featureÎļþ¿ÉÒÔÓÐ0¸ö»ò¶à¸öScenario Outline¹Ø¼ü×Ö¡£ÓÃÓÚ³¡¾°ÖÐÓжà×éÊýֵʱ£¬±ØÐëÅäºÏExampleÒ»ÆðʹÓ㬳ɶԳöÏÖ¡£
Examples£ººÍScenario Outline³É¶Ô³öÏÖ£¬ÆäÏÂÓжà×é²âÊÔÊýÖµµÄÁбí2. Step-definitionÎļþ
CucumberµÄStep-definitionºÍÆäËûµÄjava¸ñʽÎļþ»ù±¾Ïàͬ£¬µ«ÊÇÔÚ´´½¨Ê±¿ÉÒÔ¸ù¾ÝÐèҪѡÔñÐÔ¹´Ñ¡²¢×Ô¶¯Ìí¼ÓGive¡¢When¡¢Then¡¢And¡¢But×¢ÊÍ¡£

Íê³Éºó»á×Ô¶¯Éú³ÉÒ»¸öjavaÄ£°åÎļþ£¬°üÀ¨ÁË֮ǰ¹´Ñ¡µÄ×¢ÊÍ£¬±¾Àý¹´Ñ¡ÁËGiven¡¢When¡¢ThenºÍAnd¡£×¢Ê͵ĸñʽΪ£º
@¹Ø¼ü×Ö("^******$")
@Given("^you are in Given annotation$")
¹Ø¼ü×ÖºóÀ¨ºÅÀïµÄÄÚÈݱØÐëºÍÏÈǰ¶¨ÒåµÄ.featureÎļþµÄ¹Ø¼ü×ÖµÄÄÚÈÝÒ»Ò»¶ÔÓ¦£¬Ê¶±ð´óСд²¢ÇÒ°üÀ¨¿Õ¸ñÊýÄ¿µÈ¶¼ÒªÒ»Ñù£¬ÒÔ^¿ªÍ·£¬$½áβ¡£×¢ÊÍÖ®ºóΪ¾ßÌåʵÏֵķ½·¨£¬ÔÚ·½·¨ÖÐÌí¼Ó·ûºÏ¹Ø¼ü×ÖºóÃèÊöµÄ²Ù×÷µÄ´úÂë¡£
3. ²âÊÔÖ´ÐÐÎļþ
CucumberµÄ²âÊÔÖ´ÐÐÎļþÒ»°ãΪһ¸ö¿ÕµÄJunit Test Case£¬¼´²»ÐèÒªTest×¢ÊÍ£¬¸ü²»ÐèÒªBeforeºÍAfterµÈ×¢ÊÍ¡£µ±±ØÐëÌí¼ÓRunWith×¢ÊͺÍCucumberOptions×¢ÊÍ¡£
RunWith×¢ÊÍÿһ¸öCucumber¿ò¼ÜµÄ²âÊÔÎļþ¶¼ÊÇÏàͬµÄ£¬ÎªRunWith(Cucumber.class)¡£CucumberOption×¢Ê͵ÄÄÚÈÝÊǸù¾Ýʵ¼ÊÇé¿öÐèÒªÊÖ¶¯¸ü¸ÄµÄ¡£
CucumberOptions×¢ÊÍÑ¡ÏîÒ»°ãÓÐfeatures¡¢glue¡¢monochromeºÍdryrunµÈ¡£ÆäÖС£featuresºÍglueÊDZØÐ´ÏmonochromeºÍdryrunÑ¡ÌîÏî¡£
features¶¨ÒåÁË.featureÎļþµÄÏà¶Ô·¾¶£¬¸ñʽΪfeatures=¡°.featureÎļþÔڸù¤³ÌµÄÎļþ¼Ð/.featureÎļþµÄÃû×Ö¡±¡£eg.
features="Feature/calculatorAdd.feature"
glue¶¨ÒåÁËStep-difinitionµÄ°üÃû£¬¸ñʽΪglue=¡±ÍêÕûµÄ°üÃû¡±¡£eg. test.java.cucumberDefinition¡£
monochromeÑ¡ÏîÓÐÁ½¸öÖµ£¬·Ö±ðΪtrueºÍfalse£¬Ä¬ÈÏΪfalse£¬¸ñʽΪmonochrome=boolean¡£ÓÃÀ´¿ØÖƲâÊÔ½á¹ûµÄ¿É¶ÁÐÔ£¬µ±monochrome=trueʱ£¬²âÊÔ½á¹û¿É¶ÁÐÔ¸üºÃ¡£monochrome=trueʱ£¬²âÊÔ½á¹û¿É¶ÁÐԱȽϲ
dryrunÑ¡ÏîÔÝʱ²»Á˽⡣
Cucumber¿ò¼ÜµÄʹÓÃ
ͨ¹ýÒÔÉϽéÉÜ£¬Cucumber¿ò¼Ü»ù±¾´î½¨Íê³É£¬¶ÔCucumber¸÷ÎļþµÄ×÷ÓÃÒ²ÓÐËùÁ˽⣬½ÓÏÂÀ´¾ÍÊÇͨ¹ý¶Ô¿ò¼ÜµÄÐÞ¸ÄÀ´ÊµÏÖÒ»¸ö¼òµ¥µÄBDDģʽµÄµ¥Ôª²âÊÔ¡£
²âÊÔCalcualtorÀàÖеÄAdd( )³ÉÔ±·½·¨
1. н¨testAdd.featureÎļþ£¬²¢ÐÞ¸ÄÆäÄÚÈÝ
@tag
Feature: Test add function of calculator
@tag1
Scenario: Add two numbers
Given init the object of calculator
When clear the result to zero
And add num1 and num2
Then check the actual result
|
2. н¨stepDefinition.javaÎļþ£¬Ê¹ÓÃGiven¡¢When¡¢ThenºÍAnd¹Ø¼ü×Ö£¬ÐÞ¸Ä×¢ÊÍÄÚÈݲ¢¸ù¾Ý×¢ÊÍÄÚÈÝÌîд·½·¨ÖеĴúÂë¡£
package test.java.cucumberDefinition;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.When;
import cucumber.api.java.en.Then;
import static org.junit.Assert.assertEquals;
import com.calculator.Calculator;
import cucumber.api.java.en.And;
public class stepDefinition {
Calculator cal;
int result;
@Given("^init the object of calculator$")
public void given() throws Throwable {
cal= new Calculator();
}
@When("^clear the result to zero$")
public void when() throws Throwable {
cal.clear();
}
@Then("^add num1 and num2$")
public void then() throws Throwable {
cal.add(2);
cal.add(3);
}
@And("^check the actual result$")
public void and() throws Throwable {
int expected = 5;
result = cal.getResult();
assertEquals(expected,result);
}
}
|
3. н¨Ò»¸öJunit Test Case£¬²¢½«ÆäÄÚÈÝÇå¿Õ£¬×îºóÌí¼ÓRunWithºÍCucumberOptions×¢ÊÍ¡£
package com.calculator.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features="Feature/calculatorAdd.feature"
,glue="test.java.cucumberDefinition",monochrome=true)
public class testAdd {
}
|
4. ÓÒ¼ütestAdd.java£¬Ö´ÐÐrun as junit case½øÐвâÊÔ¡£
|