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

做网站空间500m多少钱织梦云建站系统

做网站空间500m多少钱,织梦云建站系统,百度怎么推广网站,电子商务市场营销前言 现在作者说明一下#xff0c;作者需要开发一个简单的VueSpringboot前后端分离实验#xff0c;想要尽量将测试的流程应用到这样的系统中。单元测试请见Junit单元测试_Joy T的博客-CSDN博客#xff0c;而单元测试加上mock呢#xff0c;最多也只能测试一下Service层的业…前言  现在作者说明一下作者需要开发一个简单的VueSpringboot前后端分离实验想要尽量将测试的流程应用到这样的系统中。单元测试请见Junit单元测试_Joy T的博客-CSDN博客而单元测试加上mock呢最多也只能测试一下Service层的业务逻辑对于数据访问层的代码比如save/insert等等用单元测试不是很到位。Junitmock请见Mock简单应用_Joy T的博客-CSDN博客 首先因为这些数据访问层的层数几乎已经到底层无法使用mock去模拟一个下层对象。其次对于数据访问层确实应该测试一下与数据库真实的连接了这种接近于实际情况的交互还是使用集成测试会好一些。 集成测试与单元测试应用场景对比 对于何时应该进行单元测试和集成测试确实存在一些争议和不同的做法。但大体上以下是一个通常的建议和理由 单元测试 业务逻辑层例如服务层、工具类等这是单元测试最有价值的地方。你可以测试逻辑是否正确、边界条件是否得到处理、异常是否正确抛出等。自定义工具或库如果你开发了一些自定义的工具类或库函数那么对它们进行单元测试是很有意义的。复杂的数据转换或处理如果你的代码需要进行复杂的数据转换或处理例如将数据从一种格式转换为另一种格式那么单元测试可以帮助确保这些转换或处理是正确的。 集成测试 数据访问层例如使用MyBatis的Mapper对于数据访问层通常集成测试更有意义。你可能会想知道SQL查询是否正确、返回的数据是否符合预期、事务是否正确处理等。对于JavaWeb来说数据访问层通常指Dao层而对于Springboot来说数据访问层就是Repository。外部服务交互当你的代码与外部服务例如其他的微服务、第三方API等交互时集成测试可以帮助确保这些交互的正确性和稳定性。整体应用流程测试应用的整体流程确保各个组件、服务或模块之间的交互是正确的。 集成测试是不是就是接口测试 集成测试它关注的是多个组件或系统的部分如两个模块、一个服务和一个数据库等如何一起工作。例如你可能有一个测试来确保你的UserRepository能够正确地从数据库中检索数据。 接口测试接口测试或API测试特指测试软件的接口确保它们正常工作、可靠并且满足其预期的功能。这些接口可能是HTTP REST API、SOAP web服务或任何其他类型的API。 简言之所有的接口测试都可以看作是集成测试但并非所有的集成测试都是接口测试。集成测试包括的领域更大。 集成测试实例 在Spring Boot应用中我们通常使用DataJpaTest来进行数据访问层的集成测试。 对UserRepository进行集成测试的示例 User.java (Entity) Entity public class User {IdGeneratedValue(strategy GenerationType.IDENTITY)private Long id;private String username;private String password;// getters, setters, constructors... }UserRepository.java public interface UserRepository extends JpaRepositoryUser, Long {OptionalUser findByUsername(String username); }UserRepositoryIntegrationTest.java (测试类) RunWith(SpringRunner.class) DataJpaTest public class UserRepositoryIntegrationTest {Autowiredprivate TestEntityManager entityManager;Autowiredprivate UserRepository userRepository;Testpublic void whenFindByUsername_thenReturnUser() {// givenUser john new User(john, 123456);entityManager.persist(john);entityManager.flush();// whenOptionalUser found userRepository.findByUsername(john.getUsername());// thenassertTrue(found.isPresent());assertEquals(found.get().getUsername(), john.getUsername());}// 其他相关的集成测试方法... }我们使用DataJpaTest来启动一个嵌入式数据库并自动配置Spring Data JPA。TestEntityManager提供了一种更为简单的方式来管理持久性上下文并允许我们执行常见的数据库操作。 详解UserRepositoryIntegrationTest.java (测试类) 我们来逐步解释UserRepositoryIntegrationTest.java中的内容。 1. 基本设置 RunWith(SpringRunner.class) DataJpaTest RunWith(SpringRunner.class)这个注解告诉JUnit使用Spring的测试运行器。这意味着我们可以在测试中利用Spring Boot的特性。 DataJpaTest这个注解专门为Spring Data JPA的测试提供支持。它会配置一个嵌入式数据库默认是H2并且会进行JPA的相关配置使得我们可以直接测试与数据库的交互。这里的“集成”体现在我们实际与一个真实的数据库交互而不是使用mock。 2. 属性和注入 Autowired private TestEntityManager entityManager;Autowired private UserRepository userRepository;TestEntityManager非常重要这是专门为测试提供的实体管理器。它是JPA EntityManager的一个简化版本用于数据库操作。我们可以使用它来添加、更新或删除测试数据。 UserRepository这是我们要测试的Spring Data JPA repository。一个专门的固定的实体管理器一个是我们要测试的Repository层。 3. 测试方法 Test public void whenFindByUsername_thenReturnUser() {// givenUser john new User(john, 123456);entityManager.persist(john);entityManager.flush();// whenOptionalUser found userRepository.findByUsername(john.getUsername());// thenassertTrue(found.isPresent());assertEquals(found.get().getUsername(), john.getUsername()); }这个测试方法分为三个阶段给定 (given)当 (when) 和那么 (then)。 给定 (given): 这里我们创建了一个新的用户对象并使用TestEntityManager将其持久化到数据库中persistflush。 当 (when): 在这一步我们试图通过UserRepository的findByUsername方法根据用户名找到用户。 那么 (then): 这是我们的断言阶段我们检查从UserRepository返回的值是否符合我们的预期。我们预期的是当我们查询一个已经存在于数据库中的用户名时UserRepository应该返回那个用户。 如果在这三个阶段中的任何一个阶段出现错误或异常或者预期的结果与实际的结果不匹配那么这个测试就会失败。 When 详解 // when OptionalUser found userRepository.findByUsername(john.getUsername()); Optional是Java 8引入的一个容器对象它可能包含一个值也可能不包含即为空就是表面意思可选。其主要目的是提供一个明确的方式来处理null值的情况避免NullPointerException更加灵活便于测试。 在我们讨论的上下文中Optional存储的是单个User对象不是数组对象名为found。所以found.get()返回的是单个User对象。 如果期望从数据库检索多个User对象那么UserRepository的方法返回类型可能会是ListUser而不是OptionalUser。例如 ListUser findByUsername(String username);在这种情况下如果有多个与指定用户名匹配的用户那么返回的列表将包含所有这些用户。你可以通过检查列表的大小或迭代列表中的每个用户来处理多个用户的情况。 但在大多数应用程序中用户名通常是唯一的所以通过用户名检索用户时通常只返回一个用户。这也是为什么在很多情况下你会看到OptionalUser作为返回类型。 Then 详解 // thenassertTrue(found.isPresent());assertEquals(found.get().getUsername(), john.getUsername()); 这两句代码是利用Java的Optional类以及JUnit的断言来验证测试的预期结果。这并不直接对应User类的方法而是与UserRepository的方法以及Java的Optional类相关。 让我们详细分析 assertTrue(found.isPresent()); 这句代码使用的isPresent()方法是Optional类的方法。当我们使用Spring Data JPA的repository方法返回对象时为了处理可能的null值例如当对象不存在于数据库中时通常会返回OptionalT类型。Optional类有一个isPresent()方法如果Optional内部包含一个非null值它返回true否则返回false相当于isExist()。 所以assertTrue(found.isPresent());这行代码的意思是我们期望UserRepository返回一个包含用户的Optional。 assertEquals(found.get().getUsername(), john.getUsername()); found.get(): 这是Optional类的另一个方法它返回Optional对象内部的值如果存在的话。 getUsername(): 这是我们的User类的方法用于获取用户的用户名。 所以assertEquals(found.get().getUsername(), john.getUsername());这行代码的意思是我们期望从数据库中检索到的用户found.get()的用户名与我们原始存储的用户john的用户名相匹配。 这样结合两句断言我们可以测试UserReposiroty中定义的FindByUsername()方法是否能够按照用户名去得到指定用户 SelectAll() 当我们想测试类似selectAll这样的方法返回的确实是一个List一般不使用Optional类对象作为承载者。为了进行集成测试我们可以添加一些记录到数据库然后调用selectAll方法最后验证返回的列表是否包含预期的记录。 以下是一个简单的示例用于测试selectAll方法 RunWith(SpringRunner.class) DataJpaTest public class UserRepositoryIntegrationTest {Autowiredprivate TestEntityManager entityManager;Autowiredprivate UserRepository userRepository;Testpublic void testSelectAll() {// Given: 添加一些预期的记录到数据库User john new User();john.setUsername(john);john.setPassword(john123);entityManager.persist(john);User jane new User();jane.setUsername(jane);jane.setPassword(jane123);entityManager.persist(jane);// When: 调用selectAll方法ListUser users userRepository.selectAll();// Then: 验证返回的列表是否包含预期的记录assertNotNull(users);assertTrue(users.size() 2); // 因为你不确定测试数据库中是否有其他记录所以我们检查是否至少有我们插入的记录// 更进一步的验证可以检查返回的用户是否真的是我们预期的那些用户assertTrue(users.stream().anyMatch(user - user.getUsername().equals(john)));assertTrue(users.stream().anyMatch(user - user.getUsername().equals(jane)));} }存储johnjane用户调用selectAll()方法使用断言验证selectAll查询到的信息有没有johnjane。
http://www.hkea.cn/news/14565474/

相关文章:

  • 长春网站建设及推广it培训班出来工作有人要么
  • 网站导航图怎么做的详细步骤中国发展在线网站官网
  • 哪里有南宁网站建设做境外网站
  • 高等院校网站建设方案临沂展厅设计公司
  • 展示型网站举例江阴企业网站制作
  • 西昌手机网站建设成都彩钢顶防水陕西省建设厅网站查询
  • 哈尔滨优化网站公司信用中国 网站 建设方案
  • 网站建设需准备什么新手学做网站12天婴
  • 外国s网站建设管理信息系统
  • vue做的网站大全杭州公司注册地址租赁
  • 中国百科网vip钓鱼网站开发国家建设部网站官网
  • 个人flash网站源码免费房屋建设图纸网站有哪些
  • 娄底哪里做网站郑州软件开发公司
  • 凡科网站制作教程wordpress修改主页
  • 建设网站投资多少钱ysl 官网中国
  • 石家庄网站建设雨点牛wordpress插件怎么破解
  • 渠道建设网站建设网站学什么条件
  • 创新网站建设工作室做网站郑州公司
  • 页面设计重点什么网站利于优化
  • 专门做眼镜的网站a 朝扬网络网站建设
  • 手机端微网站设计模板wordpress 相册
  • 无锡网站设计公司电话国内做视频网站需要啥
  • 有需要网站建设的没网站域名查询注册
  • 域名网站威海网站建设怎么样
  • 网站案例分析算命购物网站建设
  • 淘宝电商网站怎么做重庆网站建设选承越
  • 家电维修怎么自己做网站财务公司
  • 做网站图片用什么格式wordpress 收费
  • 建设银行申请信用卡网站首页世界著名室内设计案例
  • 东莞网站建设必要性什么网站可以做电影投资