工作中,和同事对测试异常的最佳方法产生了分歧。
我是比较欣赏JUnit4的@Test(expected=FooException.class)的啦,觉得这样多清爽啊,多declarative啊,再不用写那么一大坨try-fail-catch了。
不过同事(以下简称S)不这么认为。他觉得try-fail-catch挺好的,价格便宜,量又足,我们一直用它。而JUnit 4和TestNG提供的这个功能容易引诱程序员犯错误。
S给提出了一个挑战:
public void testDoSomethingBad() {
initializeSomething();
try {
...
- 21:56
- 浏览 (1018)
- 评论 (0)
- 分类: I disagree
- 进入论坛
这个事例说起来相当简单。不过小中见大,它大致体现了我和pair在DRY vs. 简单性上的差别,和那个“这样代码重用”里面的例子体现了同样的分歧。
目标是重构下面的测试代码:
public void test1() {
Account acct = new Account();
acct.setName("test");
acct.setType(TypeEnum.Type1);
acct.setActive(true);
Result result = runSomeApi(acct);
assertEquals("test", result.get ...
- 18:45
- 浏览 (3968)
- 评论 (2)
- 分类: I disagree
- 进入论坛
今天这个其实不是争论。
这是我接手的一个web系统的一个设计。我觉得很不爽,但是一时又没有好的解决方法。
情况是这样的。
我们的web app是一个传统的jsp+controller+dao的设计(Controller用的是我们元老自己设计的一个框架)。
这个app我们叫做product。
除此之外,我们还有一个定制版本的app。这个定制版本是给某个客户定制的。功能和product大同小异。但是有些小的地方的业务逻辑或者web页面会有些区别。(比如说某个提示信息不同,或者多出或者少一个text box之类的)
大家知道jsp的复用不是很容易的。而这个定制版本和product的区别 ...
- 11:12
- 浏览 (4351)
- 评论 (7)
- 分类: I disagree
- 进入论坛
这个争论的背景有点复杂。我就尽量简化了说。
遗留系统有一个自制的service locator。是一个静态函数:
public static Object newObject(Class interfaceOrDefaultClass, Class[] parameterTypes, Object[] arguments);
使用起来是这样:
ImplFactory.newObject(MyInterface.class, new Class[]{int.class, String.class}, new Object[]{new Integer(1), "abc"});
这 ...
- 05:03
- 浏览 (5795)
- 评论 (20)
- 分类: I disagree
- 进入论坛
这是一个工作中遇到的背景比较简单的争论。
有这么一个persistent object,姑且叫它Plan吧。
有这么两个函数:
Plan getPlanByName(String userid, String planName);
Plan[] getPlans(String userid);
getPlanByName内部执行的是:
select * from Plan where userid=#userid# and plan_name=#planName#
and status=1
order by order_num
getPlan的内部执行的是:
...
- 03:09
- 浏览 (16007)
- 评论 (59)
- 分类: I disagree
- 进入论坛
公司的一个大系统的持久层一直是直接使用jdbc。在jdbc的基础上,又自制了一个简陋的cache。
每个持久功能的实现都比较类似,大致相当于这样:
MyProprietaryConnection conn = ConnectionManager.checkOut(Database.DB_NAME);
try {
PreparedStatement stmt = conn.getPreparedStatement("some statement id, identifying a sql statement in an xml file");
stmt.setString(1 ...
- 03:59
- 浏览 (22715)
- 评论 (57)
- 分类: I disagree
- 进入论坛
这个争执发生在测试的时候。
背景是这样的:
一个接口有很多乱七八糟的业务相关的方法,其中有这么四个方法:
interface TaxLawBuckets {
double getRemaining401k();
double getRemaining403g();
void apply401k(double amount);
void apply403g(double amount);
}
当然,这个设计有点不是很好。更好的也许是:
interface TaxLawBuckets {
TaxLawBucket get401k();
TaxLaw ...
- 12:52
- 浏览 (4163)
- 评论 (4)
- 分类: I disagree
- 进入论坛
这个I disagree系列里面我准备把所有在工作中技术上的争执记录下来。也有立此存照的意思。也许再过几年,回头一看,会自己bs自己一把呢。
今天要记录的,是一个关于martin的refactoring那本书里提到的"Replace Temp With Query"的重构技术。
事情是这样的。在和同事pair的时候,对他频繁使用的这个重构不太同意。搞得同事很不爽。很不好意思的是,我并没有读过这本书,所以对这个重构模式事先是一无所知。这就更加让同事不爽。
当他无奈地指出“我用的是Martin推荐的”的时候,我当时还真有点不敢相信。于是我马上把书拿了过来,读了一遍Replace Temp W ...
- 11:55
- 浏览 (4592)
- 评论 (6)
- 分类: I disagree
- 进入论坛
问题是这样的。
一个MyService类里面,有一个MyResponse runService()函数。这个runService函数会调用一个web service来得到MyResponse对象。这个MyResponse对象在runService()函数中被缓存,然后返回。
现在的目标是,在runService返回以前,先把MyResponse clone一下,然后如果MyResponse.getCensus().getSalary()返回的带有几毛几分的零钱,就把这个salary truncate成整数。
需求不难,一个直观的解决方案是:
java 代码
&nb ...
- 04:01
- 浏览 (8765)
- 评论 (18)
- 分类: I disagree
- 进入论坛
程序员是相当主观的一个人群。很多时候,对问题的判断都是依靠一些经验性或者感性的原则。
最近和同事开始pair coding。发现有的时候比较郁闷。总因为各种各样的原因对一些问题达不成一致意见。互相谁也无法说服对方。今天灵机一动,想把每次发生的争执都blog下来。
一来是为了记录。二来,也是为了让大家看看你们是否同意或者反对我的意见。
- 03:11
- 浏览 (2774)
- 评论 (0)
- 分类: I disagree
- 浏览: 179854 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
动态properties转换
恩,不错,method.getReturnType 都用上了。动态代理的价值全被 ...
-- by upyaya -
动态properties转换
apache beanutils中 dwr中 jsf myfaces中 都有基 ...
-- by kimmking -
动态properties转换
签名,泛型,代理 都是自己平时很少用到的,运行一下,学习一下
-- by soleghost -
动态properties转换
呵呵,精益求精啊,不过有个地方参数顺序好像错了: public final c ...
-- by racnow -
动态properties转换
感觉可以参考spring里面的类型转换吧,它好像用的是java的Property ...
-- by yufu






评论排行榜