[seasar-dotnet:1228] Re: Quill:QuillTestCaseでのエクセルデータの投入について質問
koyak
[E-MAIL ADDRESS DELETED]
2008年 12月 17日 (水) 18:10:03 JST
小林さん
小谷です。
> [Seasar.Framework.Unit.S2FrameworkTestCaseRunner] DEBUG 2008-12-17 16:11:37,016 [10] 例外が発生しました。理由はSystem.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
> 場所 Seasar.Extension.Unit.S2TestCase.get_CommandFactory()
> 場所 Seasar.Extension.Unit.S2TestCase.WriteDb(DataSet dataSet)
S2Containerが設定されていない状態でQuillTestCaseで動かした場合も
それを使ってDBへの書き込みを行おうとしていたためNullReferenceExceptionが
発生していました。
暫定的な対応になりますがQuillTestCaseを修正しました。
お手数ですがSubversionで最新のソースコード(revision:1084〜)を取得し、
コンパイルしたDLLを使ってご確認いただけないでしょうか。
以上、よろしくお願いします。
2008/12/17 17:02 小林貴生 <[E-MAIL ADDRESS DELETED]>:
> いつもお世話になっております。
> 小林(質問者)です。
>
>
> 現在、DBFlute をプロジェクトで使用するときに Quill で使用すべく
> 調査をさせていただいております。
>
> テスト時に、エクセルデータをDBに取り込もうと考えていたのですが、
> うまく行かなかったのでちょっと質問させて下さい。
>
>
> 環境
> s2container.net-1.3.13.zip
> dbflute-0.8.7.zip
>
>
> 現象
> ・diconファイルを用意して、S2TestCase を継承した場合はエクセルデータの取込出来るが
> Quillの時には、エラーになってしまう。
>
>
> ファイル
> App.configファイル
>
> <?xml version="1.0" encoding="utf-8" ?>
> <configuration>
> <configSections>
> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
> <section name="quill" type="Seasar.Quill.Xml.QuillSectionHandler, Seasar.Quill" />
> </configSections>
>
> <log4net>
> <appender name="FileAppender" type="log4net.Appender.FileAppender">
> ...(省略)
> </log4net>
>
> <quill>
> <dataSources>
> <dataSource name="TESTDB">
> <provider>Oracle</provider>
> <connectionString>"Data Source=TESTDB;User ID=TESTUSER;Password=TESTPASS"</connectionString>
> <class>Seasar.Extension.Tx.Impl.TxDataSource</class>
> </dataSource>
> </dataSources>
> <assemblys>
> <assembly>System.Data.OracleClient, version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</assembly>
> </assemblys>
> </quill>
>
> </configuration>
>
>
> テストケースファイル(D_ACHIEVEと言うテーブルがあります。)
> using System.Collections.Generic;
> using MbUnit.Framework;
> using Seasar.Extension.Unit;
> using Seasar.Quill.Unit;
> using DBFluteTESTDB.ExBhv;
> using DBFluteTESTDB.ExEntity;
> using DBFluteTESTDB.CBean;
> using DBFluteTESTDB.Tests.Base;
>
> namespace SampI0010.Tests
> {
> [TestFixture]
> public class TestFixture1 : ContainerTestCase //:QuillTastCase from example
> {
> protected DAchieveBhv _dAchieveBhv;
>
> [Test, Quill(Tx.Rollback)]
> public void Quillを使って取得してみるテスト() //うまく通るテスト
> {
> DAchieveCB cb = new DAchieveCB();
> IList<DAchieve> list = _dAchieveBhv.SelectList(cb);
> //DB上には5件ある
> assertEquals(5, list.Count);
> }
>
> [Test, Quill(Tx.Rollback)]
> public void エクセルデータが読み込めるか() //エラーになるテスト
> {
> ReadXlsAllReplaceDb("C:\\TESTDATA.xls");
>
> DAchieveCB cb = new DAchieveCB();
> IList<DAchieve> list = _dAchieveBhv.SelectList(cb);
> //Excel内には9件ある
> assertEquals(9, list.Count);
> }
>
> }
> }
>
>
> エラーメッセージ(上のテストは通りますが、下のテストで以下のエラーになります)
> [Seasar.Quill.QuillContainer] INFO 2008-12-17 16:11:36,666 [10] [IQLL0003]Quill設定ファイル(ある=true,なし=false):True
> [Seasar.Framework.Util.DataSourceUtil] DEBUG 2008-12-17 16:11:36,726 [10] 論理的なコネクションを取得しました
> [Seasar.Extension.Tx.Impl.TransactionContext] DEBUG 2008-12-17 16:11:36,736 [10] トランザクションを開始しました
> [Seasar.Extension.ADO.Impl.BasicUpdateHandler] DEBUG 2008-12-17 16:11:36,996 [10] DELETE FROM D_ACHIEVE
> [Seasar.Framework.Unit.S2FrameworkTestCaseRunner] DEBUG 2008-12-17 16:11:37,016 [10] 例外が発生しました。理由はSystem.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
> 場所 Seasar.Extension.Unit.S2TestCase.get_CommandFactory()
> 場所 Seasar.Extension.Unit.S2TestCase.WriteDb(DataSet dataSet)
> 場所 Seasar.Extension.Unit.S2TestCase.ReadXlsAllReplaceDb(String path)
> 場所 SampI0010.Tests.TestFixture1.エクセルデータが読み込めるか() 場所 C:\solutions\TestSample\SampI0010\Tests\TestFixture1.cs:行 30
> --- 内部例外スタック トレースの終わり ---
> 場所 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
> 場所 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
> 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
> 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
> 場所 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
> 場所 MbUnit.Core.TypeHelper.Invoke(MethodInfo method, Object o, IList args)
> 場所 MbUnit.Core.Invokers.MethodRunInvoker.InvokeMethod(Object o, IList args)
> 場所 MbUnit.Core.Invokers.MethodRunInvoker.Execute(Object o, IList args)
> 場所 Seasar.Quill.Unit.QuillTestCaseRunner.Run(IRunInvoker invoker, Object o, IList args)
> System.Reflection.TargetInvocationException: 呼び出しのターゲットが例外をスローしました。 ---> System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
> 場所 Seasar.Extension.Unit.S2TestCase.get_CommandFactory()
> 場所 Seasar.Extension.Unit.S2TestCase.WriteDb(DataSet dataSet)
> 場所 Seasar.Extension.Unit.S2TestCase.ReadXlsAllReplaceDb(String path)
> 場所 SampI0010.Tests.TestFixture1.エクセルデータが読み込めるか() 場所 C:\solutions\TestSample\SampI0010\Tests\TestFixture1.cs:行 30
> --- 内部例外スタック トレースの終わり ---
> 場所 System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
> 場所 System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
> 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
> 場所 System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
> 場所 System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
> 場所 MbUnit.Core.TypeHelper.Invoke(MethodInfo method, Object o, IList args)
> 場所 MbUnit.Core.Invokers.MethodRunInvoker.InvokeMethod(Object o, IList args)
> 場所 MbUnit.Core.Invokers.MethodRunInvoker.Execute(Object o, IList args)
> 場所 Seasar.Quill.Unit.QuillTestCaseRunner.Run(IRunInvoker invoker, Object o, IList args)
> [Seasar.Extension.Tx.Impl.TransactionContext] DEBUG 2008-12-17 16:11:37,026 [10] トランザクションをロールバックしました
> [Seasar.Framework.Util.ConnectionUtil] DEBUG 2008-12-17 16:11:37,036 [10] 論理的なコネクションを閉じました
>
>
> やったこと
> この条件で、App.config に Seasarセクションを用意して、
> エラーになるテストメソッドの所で
> [Test, S2(Tx.Rollback)]
> と属性を変更してやると、エクセルをちゃんと見つけてきてデータ投入してくれます。
>
> まあコネクションが違うので、[9]!=[5]となるのですが。
>
> ログを見るとエクセルファイルの読込時にエラーになっているみたいなのですが、何かパスの書き方が違うのでしょうか?。
> それとも何か違う設定方法があるのでしょうか?。
>
> 毎度毎度質問ばかりですいません。よろしくお願いいたします。
>
>
> 以上、よろしくお願いいたします。
>
> 小林貴生
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>
seasar-dotnet メーリングリストの案内