おきらくmanholeの日記

id:manhole
 | 

2004-07-24

ちょっとした検証 - Excelから取得した期待値でassert 07:11

うーん、上手く動くと踏んだコードで、例外が投げられてしまいました。。。

org.seasar.extension.jdbc.ColumnNotFoundRuntimeException: [ESSR0068]テーブル(CaseInsensitiveMap)のカラム(NUMBERS)が見つかりません
    at org.seasar.extension.dataset.impl.DataTableImpl.getColumn(DataTableImpl.java:128)
    at org.seasar.extension.dataset.impl.DataRowImpl.getValue(DataRowImpl.java:57)
    at org.seasar.extension.dataset.impl.DataRowImpl.equals(DataRowImpl.java:139)
    at org.seasar.extension.dataset.impl.DataTableImpl.equals(DataTableImpl.java:291)
    at org.seasar.extension.dataset.impl.DataSetImpl.equals(DataSetImpl.java:115)
    at junit.framework.Assert.assertEquals(Assert.java:62)
    at org.seasar.dao.unit.BeanAssert.assertEquals(BeanAssert.java:31)
    at org.seasar.dao.unit.S2DaoTestCase.assertEquals(S2DaoTestCase.java:22)
    at org.seasar.dao.unit.S2DaoTestCase.assertEquals(S2DaoTestCase.java:26)
    at test.xlsExpected.EmployeeDaoTest.testGetEmployeeNumbersPerDepartment(EmployeeDaoTest.java:26)
    (以下略)

やろうとしたことは、Employeeから

  • 部署毎の所属社員数を算出する
  • 所属社員数の降順でソートする

というSQL (下記EmployeeDao.diconに記載) を発行し、Excelに書いた期待値(下記に記載)とassertする、ということ。

妙な例外メッセージに思えるあたり、何か勘違いしちゃってるかも。

----

  • [テストケース] EmployeeDaoTest
package test.xlsExpected;

import java.util.List;

import org.seasar.dao.unit.S2DaoTestCase;
import org.seasar.extension.dataset.DataSet;

public class EmployeeDaoTest extends S2DaoTestCase {

    private EmployeeDao dao_;

    public EmployeeDaoTest(String arg0) {
        super(arg0);
    }
    
    protected void setUp() throws Exception {
        include("test/xlsExpected/EmployeeDao.dicon");
    }

    public void testGetEmployeeNumbersPerDepartment() {
        DataSet expected = readXls("getEmployeeNumbersPerDepartment.xls");
        List actual = dao_.getEmployeeNumbersPerDepartment();
        System.out.println("expected=" + expected);
        System.out.println("actual=" + actual);
        assertEquals(expected, actual);
    }
}
  • [Dao] EmployeeDao
package test.xlsExpected;

import java.util.List;

public interface EmployeeDao {

    public List getEmployeeNumbersPerDepartment();

}
  • [Dao実装] EmployeeDaoImpl
package test.xlsExpected;

import java.util.List;

import org.seasar.extension.jdbc.SelectHandler;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;

public class EmployeeDaoImpl implements EmployeeDao {

    private static final String PATH = "test/xlsExpected/EmployeeDao.dicon";

    public List getEmployeeNumbersPerDepartment() {
        S2Container container = S2ContainerFactory.create(PATH);
        container.init();
        try {
            SelectHandler handler = (SelectHandler)container
                    .getComponent("getEmployeeCountPerDepartment");
            return (List)handler.execute(null);
        } finally {
            container.destroy();
        }
    }
}
  • [dicon] EmployeeDao.dicon
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components>
    <include path="j2ee.dicon"/>
    <component class="test.xlsExpected.EmployeeDaoImpl"/>
    
    <component name="getEmployeeCountPerDepartment"
        class="org.seasar.extension.jdbc.impl.BasicSelectHandler">
        <property name="sql">
"
SELECT 
    COUNT(*) AS NUMBERS
   ,DEPTNO
  FROM EMP
  GROUP BY DEPTNO
  ORDER BY 1 DESC
"
        </property>
        <property name="resultSetHandler">
            <component class="org.seasar.extension.jdbc.impl.MapListResultSetHandler"/>
        </property>
    </component>
</components>
  • [テストの期待値] getEmployeeNumbersPerDepartment.xls
    • Excelの"EMP"シートに記載
NUMBERS  DEPTNO
-------  ------
      6      30
      5      20
      3      10

----

  • テストケース実行時のコンソール出力結果

# テストケースに書いたSystem.outの内容を含みます。

## 期待値は正しいんだよな...

DEBUG 2004-07-24 07:28:02,512 [main] 
SELECT 
    COUNT(*) AS NUMBERS
   ,DEPTNO
  FROM EMP
  GROUP BY DEPTNO
  ORDER BY 1 DESC

DEBUG 2004-07-24 07:28:02,621 [main] 物理的なコネクションを取得しました
DEBUG 2004-07-24 07:28:02,621 [main] 論理的なコネクションを取得しました
DEBUG 2004-07-24 07:28:02,934 [main] 論理的なコネクションを閉じました
DEBUG 2004-07-24 07:28:02,934 [main] 物理的なコネクションを閉じました
expected=EMP:NUMBERS, DEPTNO
{6, 30}
{5, 20}
{3, 10}

actual=[{numbers=6, deptno=30}, {numbers=5, deptno=20}, {numbers=3, deptno=10}]

higayasuohigayasuo 2004/07/24 08:14 BeanAssertは名前の通り、いまのところJavaBeansしから検証できません。(^^;DaoにSelectHandlerをセットするにはDIを使ってください。自分で取りにいくのではなく。

manholemanhole 2004/07/24 08:21 Map → Bean に変えたら OK になりました!

manholemanhole 2004/07/24 08:24 DIにするとSQL文を増やしたときSelectHandlerが複数になって困るかと思って、自分で取りに行く形にしました。(このコードでは1SQLだから平気ですけれど)

manholemanhole 2004/07/24 09:32 ↑複数でもインジェクトOKですね、勘違いしてました。もしくは、SelectHandlerじゃなくてContainerをインジェクトするとか。家を出てから気づいたですよ...

BraimahBraimah 2012/02/16 22:33 This is a really inletlignet way to answer the question.

qdrciefqdrcief 2012/02/17 02:32 Jv7YsC <a href="http://hdggkonpuitz.com/">hdggkonpuitz</a>

ywoaxqexzekywoaxqexzek 2012/02/18 00:01 hGfmgM , [url=http://qellngqfpmkc.com/]qellngqfpmkc[/url], [link=http://yseewsptkwxy.com/]yseewsptkwxy[/link], http://vlgfqqxtftmv.com/

ゲスト



トラックバック - http://seasarproject.g.hatena.ne.jp/manhole/20040724
 | 
2004 | 05 | 06 | 07 | 08 | 09 |