xiaoshengyige 2019-06-28
在写新代码前写一个失败的测试用例 消除重复
没有测试的功能=没有的功能 有测试=可重构 有测试> 有文档
CL: java -cp junit.jar junit.textui.TestRunner className.methodName Ant, Maven, Gradle, IDE Keep the bar green to keep the code clean
Tests are the Programmer’s Stone, transmuting fear into boredom.
Cagetory, TestSuit, TestRunner
保持代码的可测试性:
new
许多情况下更方便测试, 为方便new,可借鉴Builder
工厂化方法模式@Autowired
需要@WebAppConfiguration @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:/spring-test.xml" }) ...
Keep simple
解耦方法:
目录结构,分离test与src 测试代码与正式代码分开放到不同文件目录 src/main/java src/test/java 但每个类的测试类与被测试类采用同样的包名 src/main/java/com/example/MyBeauty.java src/test/java/com/example/MyBeautyTest.java 依赖分离 maven dependency依赖增加 <scope>test</scope> gradle 依赖增加 testCompile 后缀 方法命名以test开头,兼容JUnit3,4,5 AclassTest.testMethod()
依赖容器的测试:Jetty的配置 集成测试:mvn integration-test Selenium相应配置,浏览器插件
配置文件spring-test.xml,pom_test.xml 通过 注解和mvn -f 参数分别指定 Spring MVC测试:mockMvc (略) Spring security 权限处理:(略)
BDD vs TDD http://farenda.com Java programming tutorials with many code examples! https://github.com/spockframework smarter-testing-with-spock.pdf spock-next-generation.pdf
基于Groovy Groovy Grape Geb Gradle ... 测试类需要继承自 Specification(说明书)
class MyBeautyControllerSpec extends Specification {
标记关键词 Spec: when then expect given where
扩展:GebSpec //基于selenium 动作: go, isAt, doAt 内置对象:pageUrl,_browser,page,$ 参见:adminssll/test/script/LoginSpec
go "https://bixuebihui.com/" println pageUrl assert $("div.title h3").text() == "认证" $("form").with { username = "user1" password = "123" $('input', name:'submit').click() } go '/blog/'
速度,覆盖率,可重复
对于Gradle项目
会在项目目录下生成报测试报告 build/reports/tests/test/index.html
对于maven项目,测试报告生成: mvn site
以上内容基于2017-7-13邻里中国技术部的培训资料