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

网站开发软件开发项目深圳网站建设公司联华

网站开发软件开发项目,深圳网站建设公司联华,wordpress 支持js,城建档案网站建设 博客在我以前的文章中#xff0c;我展示了有关JavaBeans单元测试的一些技巧。 在此博客文章中#xff0c;我将提供有关单元测试某些相当常见的Java代码的另外两个技巧#xff0c;即实用程序类和Log4J日志记录语句 。 测试实用程序类 如果您的实用程序类遵循与我倾向于编写的相同… 在我以前的文章中我展示了有关JavaBeans单元测试的一些技巧。 在此博客文章中我将提供有关单元测试某些相当常见的Java代码的另外两个技巧即实用程序类和Log4J日志记录语句 。 测试实用程序类 如果您的实用程序类遵循与我倾向于编写的相同的基本设计则它们由带有私有构造函数和所有静态方法的最终类组成。 实用类测试仪 package it.jdev.example;import static org.junit.Assert.*;import java.lang.reflect.*;import org.junit.Test;/*** Tests that a utility class is final, contains one private constructor, and* all methods are static.*/ public final class UtilityClassTester {private UtilityClassTester() {super();}/*** Verifies that a utility class is well defined.* * param clazz* throws Exception*/Testpublic static void test(final Class? clazz) throws Exception {// Utility classes must be final.assertTrue(Class must be final., Modifier.isFinal(clazz.getModifiers()));// Only one constructor is allowed and it has to be private.assertTrue(Only one constructor is allowed., clazz.getDeclaredConstructors().length 1);final Constructor? constructor clazz.getDeclaredConstructor();assertFalse(Constructor must be private., constructor.isAccessible());assertTrue(Constructor must be private., Modifier.isPrivate(constructor.getModifiers()));// All methods must be static.for (final Method method : clazz.getMethods()) {if (!Modifier.isStatic(method.getModifiers()) method.getDeclaringClass().equals(clazz)) {fail(Non-static method found: method .);}}}} 该UtilityClassTester本身也遵循上面提到的实用程序类约束因此有什么更好的方法通过使用它来测试自身来证明其用途 UtilityClassTester的测试用例 package it.jdev.example;import org.junit.Test;public class UtilityClassTesterTest {Testpublic void test() throws Exception {UtilityClassTester.test(UtilityClassTester.class);}}测试Log4J记录事件 调用声明异常的方法时您将重新声明该异常或者尝试在try-catch块中对其进行处理。 在后一种情况下至少要做的是记录捕获的异常。 下面是一个非常简单的示例 MyService示例 package it.jdev.example;import java.lang.invoke.MethodHandles;import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;Service public class MyService {private static final Logger LOGGER Logger.getLogger(MethodHandles.Lookup.class);Autowiredprivate MyRepository myRepository;public void doSomethingUseful() {try {myRepository.doSomethingVeryUseful();} catch (SomeException e) {LOGGER.error(Some very informative error logging., e);}}} 当然您将需要测试是否正确记录了异常。 遵循以下内容 MyService日志记录事件的测试用例 package it.jdev.example;import static org.junit.Assert.*;import org.apache.log4j.spi.LoggingEvent; import org.junit.*; import org.mockito.*;public class MyServiceTest {Mockprivate MyRepository myRepository;InjectMocksprivate MyService myService new MyService();Beforepublic void setup() {MockitoAnnotations.initMocks(this);}Testpublic void thatSomeExceptionIsLogged() throws Exception {TestAppender testAppender new TestAppender();Mockito.doThrow(SomeException.class).when(myRepository).doSomethingVeryUseful();myService.doSomethingUseful();assertTrue(testAppender.getEvents().size() 1);final LoggingEvent loggingEvent testAppender.getEvents().get(0);assertEquals(Some very informative error logging., loggingEvent.getMessage().toString());}} 但是如何实现这一目标呢 事实证明将新的LogAppender添加到Log4J RootLogger非常容易。 用于Log4J的TestAppender package it.jdev.example;import java.util.*;import org.apache.log4j.*; import org.apache.log4j.spi.*;/*** Utility for testing Log4j logging events.* p* Usage:br /* code* TestAppender testAppender new TestAppender();br /* classUnderTest.methodThatWillLog();br /br /* LoggingEvent loggingEvent testAppender.getEvents().get(0);br /br /* assertEquals()...br /br /* /code*/ public class TestAppender extends AppenderSkeleton {private final ListLoggingEvent events new ArrayListLoggingEvent();public TestAppender() {this(Level.ERROR);}public TestAppender(final Level level) {super();Logger.getRootLogger().addAppender(this);this.addFilter(new LogLevelFilter(level));}Overrideprotected void append(final LoggingEvent event) {events.add(event);}Overridepublic void close() {}Overridepublic boolean requiresLayout() {return false;}public ListLoggingEvent getEvents() {return events;}/*** Filter that decides whether to accept or deny a logging event based on* the logging level.*/protected class LogLevelFilter extends Filter {private final Level level;public LogLevelFilter(final Level level) {super();this.level level;}Overridepublic int decide(final LoggingEvent event) {if (event.getLevel().isGreaterOrEqual(level)) {return ACCEPT;} else {return DENY;}}}}翻译自: https://www.javacodegeeks.com/2014/09/some-more-unit-test-tips.html
http://www.yutouwan.com/news/423795/

相关文章:

  • 长白山开发建设集团网站小程序代理招商公司
  • 广州建网站哪家最好手机网银怎么开通
  • 如何绑定网站域名宁波建筑公司排名
  • 婚纱摄影网站制作设计房子的软件免费
  • 安徽龙山建设有限公司网站网站首页设计创意
  • 学校网站首页设计怎样创造网站
  • 去年做那些网站能致富单位做网站怎么做
  • 信誉好的邢台做网站石家庄市住房和城乡建设局官方网站
  • 平台网站建设合同上海最好网站建设公司
  • 怎么更改网站名称我的网站为什么
  • 广州市提取住房补贴建设银行网站福州小程序开发公司
  • 如何做社团网站邯郸网站制
  • 潍坊 企业网站建设西安分类信息网站
  • 网站制作报价开网址是什么
  • 网站建设合同怎么交印花税做商城网站在哪里注册营业执照
  • 个人dw网页设计seo综合查询接口
  • 综合门户类网站有哪些张店易宝网站建设
  • 广州做网站哪个公司做得好汕尾网站建设公司
  • 做网站成功的企业如何让网站长尾关键词有排名
  • 手机网站建设代码昆明seo
  • 东莞高端模板建站e福州怎么代缴医保
  • 中山小榄网站线上营销平台
  • 网站建设技术有哪些网络整合营销4i原则
  • 怎么把网站横幅做很大大气网站首页模板
  • qingdao城乡住房建设厅网站wdcp创建wordpress
  • 网站首页不收录中文字幕mv在线观看
  • 承德工程建设信息网站网站建设主要营销内客
  • 网站改名工信部需要怎么做软文范例200字
  • 西安网站建设费用北京网站建设策划解决方案
  • asp 网站源码 下载可信网站认证不在有用吗