[Seasar-user:13913] Re: [Dbflute] Junitテストの時Bhvがnullになります。

Yuu [E-MAIL ADDRESS DELETED]
2008年 4月 24日 (木) 12:43:46 JST


久保様、

ありがとうございます!!
解決できました。

本当にありがとうございます。

----- Original Message ----- 
送信者: kubo<[E-MAIL ADDRESS DELETED]>
宛先: [E-MAIL ADDRESS DELETED]
日付:Thursday, April, 24, 2008, 12:02 PM
件名: [Seasar-user:13912] Re:[Dbflute] Junitテストの時Bhvが=?utf-8?b?bnVsbOOBq+OBquOCiuOBvuO
BmeOAgg==?=

> 
> 
> 久保です。
> 
> Yuuさん、こんにちは
> 
> >  public class RegisterPageTest extends S2TestCase {
> >
> >         RegisterPage registerPage = new RegisterPage();
> 
> こちらで「new RegisterPage()」とされているため、
> registerPageの全てのフィールドはnullのはずです。
> ご自身でインスタンスを生成することで、
> Seasarのコンポーネントとしては扱われないためです。
> 
> S2TestCaseは、テストケース自体のフィールドに
> Diconに登録されているコンポーネントをインジェクションします。
> 例えば、以下のように書けば、テストクラスにBehaviorが
> インジェクションされるはずです。
> 
> public class RegisterPageTest extends S2TestCase {
> 
>     UserdetailsBhv userdetailsBhv;
>     public void test_xxx() {
>         userdetailsBhv.outside()... // nullじゃないはず
>     }
> 
> ただ、RegisterPageを上記のように設定してテストしやすい形に
> 振舞うかは自分はやってことありません。
> (Interceptorとか動いてしまわないか!?!?)
> 
> 自分がTeedaを使ったときにやったPageクラスのテストは以下のような感じです。
> この方法で全てのPageクラスをテストしていました。
> 
> 1. RegisterPageをテストメソッドで自分でnewする。
> 2. UserdetailsBhvはテストクラスにインジェクションしてもらう。
> 3. 自分でnewしたRegisterPageにUserdetailsBhvを手動で設定
> 4. RegisterPageを実行
> 
> public class RegisterPageTest extends S2TestCase {
> 
>     UserdetailsBhv userdetailsBhv;
>     public void test_xxx() {
>         // ## Arrange ##
>         RegisterPage page = new RegisterPage();
>         page.userdetailsBhv = this.userdetailsBhv;
>         Random a= new Random();
>         page.uid = "t"+a.nextInt(999);
> 
>         // ## Act ##
>         Class clazz = page.doSave();
> 
>         ...
>     }
> 
> 実際には、
>         RegisterPage page = new RegisterPage();
>         page.userdetailsBhv = this.userdetailsBhv;
> の部分は、protectedメソッドにでもして、テストメソッド間で
> 再利用しておりましたが。。。
> 
> 
> 
> 
> 2008/4/24 Yuu <[E-MAIL ADDRESS DELETED]>:
> >
> >  いつもお世話になっております。
> >
> >  今日はテストについて質問があります。
> >
> >  普通の時は問題ないbhv処理が
> >  (system.out.printlnして見たら
> >  [E-MAIL ADDRESS DELETED]とnullではなく
> >  何か値が入っています。)
> >  Junitテストする時だけ
> >  Nullになってsystem.out.printlnして見てもnullになっています。
> >  (テストクラスにSystem.out.println(registerPage.userdetailsBhv);してみたら
> >  nullが確認できます。registerPage自体のsystem.out.printlnにもnullです。)
> >
> >  この理由でnullPointExceptionで発生しテストが出来なくなります。
> >
> >  テストクラスのsetUp()は
> >  @Before
> >         public void setUp() throws Exception {
> >                 include("dbflute.dicon");
> >  }
> >  でしたが
> >
> >  @Before
> >         public void setUp() throws Exception {
> >                 super.setUp();
> >                 include("dbflute.dicon");
> >                 include("jdbc.dicon");
> >                 include("app_aop.dicon");
> >                 include("app.dicon");
> >                 include("customizer.dicon");
> >                 include("teedaCustomize.dicon");
> >                 include("s2container.dicon");
> >                 include("creator.dicon");
> >                 include("convention.dicon");
> >         }
> >  までやって見てもbhvのnull問題が解消できません。
> >
> >  今テストクラスのソースを記述します。
> >
> >  package sampleproject.web.login;
> >
> >  import java.util.Random;
> >
> >  import org.seasar.extension.unit.S2TestCase;
> >  import static org.junit.Assert.*;
> >  import org.junit.Before;
> >  import org.junit.Test;
> >  import  sampleproject.web.login.RegisterPage;
> >
> >  import sampleproject.dbflute.exbhv.UserdetailsBhv;
> >  import sampleproject.dbflute.exdao.pmbean.SimpleselectUserdetailspmb;
> >  import sampleproject.dbflute.exentity.Userdetails;
> >  import sampleproject.dbflute.exentity.Users;
> >  import sampleproject.dbflute.exentity.customize.SimpleUserdetails;
> >
> >  public class RegisterPageTest extends S2TestCase {
> >
> >         RegisterPage registerPage = new RegisterPage();
> >         //UserdetailsBhv userdetailsBhv = new UserdetailsBhv();
> >
> >         @Before
> >         public void setUp() throws Exception {
> >                 super.setUp();
> >                 include("dbflute.dicon");
> >                 include("jdbc.dicon");
> >                 include("app_aop.dicon");
> >                 include("app.dicon");
> >                 include("customizer.dicon");
> >                 include("teedaCustomize.dicon");
> >                 include("s2container.dicon");
> >                 include("creator.dicon");
> >                 include("convention.dicon");
> >         }
> >
> >
> >         @Test
> >         public void testDoSave() {
> >
> >                 final Class<SimpleUserdetails> entityType = SimpleUserdetails.class;
> >                 final SimpleselectUserdetailspmb pmb = new SimpleselectUserdetailspmb();

> >                 UserdetailsBhv userdetailsBhv;
> >                 Random a= new Random();
> >                 registerPage.uid = "t"+a.nextInt(999);
> >
> >                 System.out.println(registerPage.userdetailsBhv);
> >                 Class result = registerPage.doSave();
> >
> >         assertNotNull(result);
> >                 assertNotNull(registerPage.userexistmsg);
> >         }
> >
> >         @Test
> >         public void testUsercheck() {
> >                 registerPage.uid = "test";
> >                 assertFalse(registerPage.usercheck());
> >         }
> >
> >         @Test
> >         public void testInitialize() throws Exception {
> >
> >                 Boolean result =true;
> >                 try {
> >                         registerPage.initialize();
> >                 }catch(Exception e){
> >                         result = false;
> >                         throw e;
> >                 }
> >
> >                 assertTrue(result);
> >         }
> >
> >         @Test
> >         public void testPrerender() throws Exception {
> >                 Boolean result =true;
> >                 try {
> >                         registerPage.prerender();
> >                 }catch(Exception e){
> >                         result = false;
> >                         throw e;
> >                 }
> >
> >                 assertTrue(result);
> >
> >         }
> >
> >
> >  }
> >
> >  テスト対象のRegisterPage.java
> >
> >  package sampleproject.web.login;
> >
> >  import java.util.List;
> >
> >  import org.seasar.teeda.extension.annotation.validator.Length;
> >  import org.seasar.teeda.extension.annotation.validator.Required;
> >  import org.seasar.teeda.extension.util.LabelHelper;
> >
> >  import sampleproject.dbflute.cbean.UserdetailsCB;
> >  import sampleproject.dbflute.cbean.UsersCB;
> >  import sampleproject.dbflute.exbhv.UserdetailsBhv;
> >  import sampleproject.dbflute.exbhv.UsersBhv;
> >  import sampleproject.dbflute.exdao.pmbean.SimpleselectUserdetailspmb;
> >  import sampleproject.dbflute.exentity.Userdetails;
> >  import sampleproject.dbflute.exentity.Users;
> >  import sampleproject.dbflute.exentity.customize.SimpleUserdetails;
> >  import sampleproject.web.test.CommonText;
> >
> >  public class RegisterPage {
> >         public String uid;
> >         public String name;
> >         public String add;
> >         public String email;
> >         public LabelHelper lp;
> >         public String passid;
> >         public String userexistmsg;
> >         public UsersBhv usersBhv;
> >         public UserdetailsBhv userdetailsBhv;
> >
> >         /**
> >          * id登録処理
> >          * @return class
> >          */
> >         public Class doSave() {
> >                 boolean userchk;
> >                 userchk = usercheck();
> >
> >
> >                 if (userchk){
> >                         userexistmsg = lp.getLabelValue("userexist");
> >                         return null;
> >                 }
> >                 else
> >                 {
> >                         insert();
> >                         return LoginPage.class;
> >                 }
> >         }
> >
> >         /**
> >          * id重複チェック
> >          * @return boolean
> >          */
> >
> >         public boolean usercheck(){
> >                 final Class<SimpleUserdetails> entityType = SimpleUserdetails.class;
> >                 final SimpleselectUserdetailspmb pmb = new SimpleselectUserdetailspmb();

> >
> >                 pmb.setUserid(uid);
> >
> >                 System.out.println(userdetailsBhv + "null check!");
> >                 final List<SimpleUserdetails> resultList =  userdetailsBhv.outsideSql().
selectList(CommonT
> >  ext.SELECTUSERDETAILSPATH,pmb, entityType);
> >                 if (resultList.size() > 0){
> >                         return true;
> >                 }
> >                 else{
> >                         return false;
> >                 }
> >
> >         }
> >         public void initialize() {
> >         }
> >
> >         public void prerender() {
> >         }
> >  }
> >
> >  問題の部分
> >  テストクラスの
> >  Class result = registerPage.doSave();   部分でnullPointException
> >  テスト対象クラスの
> >
> >  final List<SimpleUserdetails> resultList =  userdetailsBhv.outsideSql().selectList(Comm
onTex
> >  t.SELECTUSERDETAILSPATH,pmb, entityType);
> >  部分のuserdetailsBhvがテストの時だけnullになる。
> >
> >  解消する方法をしてる方、お答えお願いいたします。
> >
> >  _______________________________________________
> >  Seasar-user mailing list
> >  [E-MAIL ADDRESS DELETED]
> >  https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 


Seasar-user メーリングリストの案内