当前位置: 首页 > news >正文

dw做的网站如何上传wordpress内嵌播放器

dw做的网站如何上传,wordpress内嵌播放器,企业解决方案官网,慈溪网站制作哪家最好单元测试应该小巧玲珑#xff0c;轻盈快捷。然而#xff0c;一个待测的对象可能依赖另一个对象。它可能需要跟数据库、邮箱服务器、Web Service、消息队列等服务进行交互。但是#xff0c;这些服务可能在测试过程中不可用。假设这些服务可用#xff0c;依赖这些服务的单元测…单元测试应该小巧玲珑轻盈快捷。然而一个待测的对象可能依赖另一个对象。它可能需要跟数据库、邮箱服务器、Web Service、消息队列等服务进行交互。但是这些服务可能在测试过程中不可用。假设这些服务可用依赖这些服务的单元测试可能相当耗时。要是 Web Service 不可获得。数据库因维护而关闭。消息队列笨重且缓慢。 这些违背单元测试小巧玲珑轻盈快捷的初衷。单元测试被期待在几毫秒内执行完成。若单元测试缓慢你的开发过程受阻这会影响你开发组的效率。解决之道就是模拟(Mocking), 若你遵循OOP的SOILD原则且使用Spring的依赖注入单元测试中的模拟Mock变得轻而易举。你不必连接数据库。你只需一个能返回你期待值的对象。若你编写紧密耦合代码模拟会相当艰难。我目睹过许多因紧密耦合其它对象的遗留代码不能单元测试。不可测试代码不遵循OOP的SOILD原则且不能使用依赖注入。 Mockito初体验 接下来将学习使用Mockito框架。它是一套通过简单的方法对于指定接口或类生产Mock对象的类库。使用Mockito在准备阶段只需少量时间可以使用简洁的API编写漂亮的测试可以对具体类创建Mock对象并且有监视非Mock对象的功能。 这有两个术语需要了解一下。 Stub对象作用是在测试时提供所需的测试数据可以对各种交互设置相应的回应。Mockito中when(...).thenReturn(...)这样的语法便是设置方法调用的返回值。另外也可以设置方法在何时调用会抛异常等。 Mock对象用来验证测试中所依赖对象间的交互是否能够达到预期。Mockito中用verify(...).methodXxx(...)语法验证methodXxx()方法是否按照预期进行调用。 需要加入到pom.xml的依赖如下 dependencygroupIdorg.mockito/groupIdartifactIdmockito-core/artifactIdversion2.16.0/versionscopetest/scope /dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.12/versionscopetest/scope /dependency创建Mock对象 可以通过两种方法来Mock对象 通过mock(ClassT clazz)方法。通过Mock注解需要Mock的对象然后调用MockitoAnnotations.initMocks(this)或RunWith(MockitoJUnitRunner.class)初始化模拟。 //RunWith(MockitoJUnitRunner.class) public class MockitoSampleTest {// 模拟接口UserService mockUserService mock(UserService.class);// 模拟实现类UserServiceImpl mockServiceImpl mock(UserServiceImpl.class);// 基于注释模拟类MockUser mockUser;Beforepublic void initMocks() {// 初始化当前测试类所有Mock注释模拟对象MockitoAnnotations.initMocks(this);} }值得注意的是对于final类、匿名类和Java的基本类型是无法进行Mock的。 设定Mock对象的期望值行为及返回值 有两种通用基础设定写法 when(...).thenReturn(...);doReturn(...).when(...).someMethod(); 但是doReturn(...).when(mockObj.someMethod());会抛异常。 Test public void testMockClass() {// 对方法设定返回值也就是设置数据桩when(mockServiceImpl.findUserByUserName(tom)).thenReturn(new User(tom, 1234));doReturn(true).when(mockServiceImpl).hasMatchUser(tom, 1234);User user mockServiceImpl.findUserByUserName(tom);boolean isMatch mockServiceImpl.hasMatchUser(tom, 1234);assertNotNull(user);assertEquals(user.getUserName(), tom);assertEquals(isMatch, true);}也值得注意的是static和final修饰的方法无法进行设定的。 验证交互行为 Mock对象一旦建立便会自动记录自己的交互行为所以可以有选择地对其交互行为进行验证。 Test // 模拟接口UserService测试 public void testMockInterface() {// 对方法设定返回值也就是设置数据桩when(mockUserService.findUserByUserName(tom)).thenReturn(new User(tom, 1234));doReturn(true).when(mockUserService).hasMatchUser(tom, 1234);// 对void方法进行方法预期设定User u new User(John, 1234);doNothing().when(mockUserService).registerUser(u);// 执行方法调用User user mockUserService.findUserByUserName(tom);boolean isMatch mockUserService.hasMatchUser(tom, 1234);mockUserService.registerUser(u);assertNotNull(user);assertEquals(user.getUserName(), tom);assertEquals(isMatch, true);// 验证交互行为verify(mockUserService).findUserByUserName(tom);// 验证方法只调用一次verify(mockUserService, times(1)).findUserByUserName(tom);// 验证方法至少调用一次verify(mockUserService, atLeastOnce()).findUserByUserName(tom);verify(mockUserService, atLeast(1)).findUserByUserName(tom);// 验证方法至多调用一次verify(mockUserService, atMost(1)).findUserByUserName(tom);verify(mockUserService).hasMatchUser(tom, 1234);verify(mockUserService).registerUser(u); }对Service层进行单元测试 同常主要Java Web应用分ControllerServiceDAO基本三层来进行开发。 接下来通过使用Mockito框架对Service进单元测试。 Domain领域对象 public class Product {}DAO数据连接层 public interface ProductDao {int getAvailableProducts(Product product);int orderProduct(Product product, int orderedQuantity); }Service业务逻辑层 public class ProductService {private ProductDao productDao;public boolean buy(Product product, int orderedQuantity) {int availableQuantity productDao.getAvailableProducts(product);if (orderedQuantity availableQuantity) {return false;}productDao.orderProduct(product, orderedQuantity);return true;}}Service测试用例 public class ProductServiceTest {private ProductDao productDao;Beforepublic void setupMock() {//模拟Dao层productDao mock(ProductDao.class);}Testpublic void testBuy() {int availableQuantity 30;Product product new Product();ProductService productService new ProductService();//设置数据桩when(productDao.getAvailableProducts(product)).thenReturn(availableQuantity);//doReturn(availableQuantity).when(productDao).getAvailableProducts(product);//这写法不行//doReturn(availableQuantity).when(productDao.getAvailableProducts(product));//通过Spring测试框架提供的工具类为目标对象私有属性设值这样就不用ProductDao另建setProductDao()方法ReflectionTestUtils.setField(productService, productDao, productDao);Assert.assertFalse(productService.buy(product, 31));Assert.assertTrue(productService.buy(product, 3));//验证交互行为verify(productDao).orderProduct(product, 3);verify(productDao, times(2)).getAvailableProducts(product);}}测试用例中用到Spring test框架的ReflectionTestUtils它可以为目标对象非公有属性设值或调用非公有setter方法方便测试过程中使用。 为了使用ReflectionTestUtils需要向pom.xml添加下面的依赖 dependencygroupIdorg.springframework/groupIdartifactIdspring-test/artifactIdversion3.0.5.RELEASE/versionscopetest/scope /dependencydependencygroupIdorg.springframework/groupIdartifactIdspring-core/artifactIdversion3.0.5.RELEASE/versionscopetest/scope /dependencydependencygroupIdcommons-logging/groupIdartifactIdcommons-logging/artifactIdversion1.2/versionscopetest/scope /dependency总结 本文介绍了Mockito的基本用法以及通过它Mock对象对Service层辅助测试用例。在Mockito辅助下单元测试变得如虎添翼啊 在编写代码过程中必须反复调试它保证他顺利通过。虽代码通过编译只是说明其语法正确但不能保证其语义也正确。没有任何人可以轻易承诺这段代码的行为一定是正确的。幸运的是单元测试会为我们的承诺作出保证。编写单元测试就是用来验证这段代码的行为是否与我们期望的一样。有了单元测试我们可以自信地交付自己的代码减少后顾之忧。 引用 Mocking in Unit Tests with Mockito Mockito (Mockito 2.16.0 API) 《Spring 3.x企业应用开发实战》陈雄华、林开雄 著 Spring Framework Reference Documentation 11. Testing
http://www.pierceye.com/news/501359/

相关文章:

  • 专业的网站设计制作怎么建正规网站
  • 用安卓做网站php网站开发系统
  • 58同城网站建设的不足网站前台代码
  • 网站建设销售人员培训教程长兴县建设局网站
  • 用vue框架做的pc端网站wordpress改造论坛
  • 大庆建设网站首页中国寰球工程有限公司网站设计
  • 免费搭建贴吧系统网站js做网站框架
  • 泰安如何选择网站建设网盘 商业网站建设案例课程 下载
  • 可信赖的邵阳网站建设动漫设计属于什么大类
  • 西安网站排名优化网站设计用什么软件实现
  • 网站注册页面模板html5教程百度云
  • 深圳装饰公司前十强佛山seo优化电话
  • 广东阳春市建设局网站做手机网站的重要性
  • 设置网站的关键词自己做网站有什么用
  • 做那个网站比较好百度百科优化排名
  • 好发信息网站建设新闻今天最新消息
  • 邮件服务器是不是网站服务器河南住房和城乡建设网站
  • 微网站管理平台网站连锁店查询怎么做
  • 网域高科学校网站管理系统企业融资以什么为基础
  • 百度网站改版工具提高网站安全性
  • 科技网站推荐南宁百度seo
  • 设计婚纱网站wordpress主题制作全过程新手必看
  • 郑州网站seo厂家上海制作网页的公司有哪些
  • 网站修改关键词不收录vps 可以做多个网站吗
  • 营销外包网站App加网站什么做
  • 网页设计网站制作视频教程重庆是哪个省份
  • 国家建设厅官方网站平台类网站有哪些
  • 多语言网站建设公司wap网站技术
  • 网站制作设计多少钱上海智能网站建设公司
  • 知名的教育行业网站开发华夏集团网站建设