テスターですが何か?

ホビープログラマ略してHPです

Seasar(S2Container.NET)を利用したサンプルの作成(3)

leave a comment »

(2)までで作成したプログラムに対するテストプログラムを作成していきます。

—————————————

1.MbUnitのインストール

ここからMbUnitのダウンロード&インストール。S2Containner.NETのサイトで2.3.83 以上が推奨とあったので、2.4.2をダウンロードしました。インストールは一心不乱にNextやらOKやらをクリックしていくと終了します。

 

2.テストプロジェクトの作成&プロジェクト参照の追加

テストプロジェクトを新規作成(被テストプロジェクトと同一ソリューション内に作成)し、テストプロジェクトから被テストプロジェクトへのプロジェクト参照を追加

 

3.テストプロジェクトへSeasar.Unit.dllへの参照の追加

S2Containerの解凍ディレクトリにある、Seasar.Unit.dll(s2containerbuildnet2.0Seasar.Unit.dll)への参照を追加する。

  プロジェクトを右クリック → [参照の追加] → [参照] から対象のDLLを選択する

※以降、すべてテストプロジェクトでのオペレーションになります。

 

4.diconファイルの作成

 Testapp.dicon

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
   3: "http://www.seasar.org/dtd/components.dtd">
   4: <components>
   5:   <include path="TestS2Sample.dicon"/>
   6: </components>

 TestS2Sample.dicon

   1: <?xml version="1.0" encoding="utf-8" ?>
   2: <!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
   3: "http://www.seasar.org/dtd/components.dtd">
   4: <components>
   5:   <component name="S2SampleLogicTest" class="S2ContainerSample.S2SampleLogicImpl">
   6:     <arg>
   7:       <component class="S2ContainerSampleTest.S2SampleDaoImplMock" />
   8:     </arg>
   9:   </component>
  10:   <component name="S2SampleDaoTest" class="S2ContainerSample.S2SampleDaoImpl" />
  11: </components>

 

5.テストコードを作成

  ※ソース全体は載せずにポイントを記載

  S2SampleLogicTest.vb

   ・MbUnitとS2.NETと被テストモジュールをimport

   ・S2TestCaseを継承

   ・Logicクラスのみをテストしたいので、DaoのMockクラスを作成しdiconファイルでMockとの依存関係を設定

   1: Imports MbUnit.Framework
   2: Imports S2ContainerSample
   3: Imports Seasar.Extension.Unit
   4:  
   5: <TestFixture()> _
   6: Public Class S2SampleLogicTest
   7:     Inherits S2TestCase
   8:  
   9:     <Test(), S2()> _
  10:     Public Sub TestGetClickResultData1()
  11:  
  12:         Include(S2SampleConst.DiconPath)
  13:  
  14:         Dim S2SampleLogic As IS2SampleLogic = GetComponent("S2SampleLogicTest")
  15:  
  16:         Dim S2ViewDto As New S2ViewDTO
  17:         S2ViewDto.ServiceName = "aaaa"
  18:  
  19:         Dim AssertList As New List(Of S2GridDTO)
  20:  
  21:         AssertList = S2SampleLogic.GetClickResultData(S2ViewDto)
  22:  
  23:         Assert.AreEqual(1, AssertList.Item(0).Seq)
  24:         Assert.AreEqual("http://hogehoge.jp?hoge=abc", AssertList.Item(0).URL)
  25:         Assert.AreEqual("あいうえお", AssertList.Item(0).Link)
  26:         Assert.AreEqual("成功", AssertList.Item(0).Result)
  27:         Assert.AreEqual("2009-04-26", AssertList.Item(0).ClickDate)
  28:  
  29:     End Sub
  30:  
  31: End Class
  32:  

  S2SampleDaoImplMock

   ・テスト用コードではないので、普通のクラスとして作成

   1: Imports S2ContainerSample
   2:  
   3: Public Class S2SampleDaoImplMock
   4:     Implements S2ContainerSample.IS2SampleDao
   5:  
   6:     Public Function FindByServiceName(ByVal ServiceName As String) As System.Collections.Generic.List(Of S2ContainerSample.ClickResult) Implements S2ContainerSample.IS2SampleDao.FindByServiceName
   7:  
   8:         Dim ClickResult As New ClickResult
   9:         Dim ClickResultList As New List(Of ClickResult)
  10:  
  11:         ClickResult.Sequence = 1
  12:         ClickResult.LinkString = "あいうえお"
  13:         ClickResult.ServiceName = "12345"
  14:         ClickResult.URL = "http://hogehoge.jp?hoge=abc"
  15:         ClickResult.Result = 1
  16:         ClickResult.ClickDate = Date.Today
  17:  
  18:         ClickResultList.Add(ClickResult)
  19:  
  20:         Return ClickResultList
  21:  
  22:     End Function
  23:  
  24: End Class

 

6.MbUnitでテストを実行

  ・テストプロジェクトで「ソリューションのビルド」を実行

  ・MbUnitを起動し、[Assemblies]-[Add Assemblies]からテストプロジェクトのDLL(S2ContainerSamplTest.dll)を選択

  ・MbUnitから「Run」を力いっぱいクリック

 ⇒ そしたら、「app.diconが見つかりません」というエラー。よくよく考えてみると、diconファイルを「埋め込まれたリソース」に設定しているせいとおもって、diconファイルを設定を変更。被テストプロジェクトと、テストプロジェクトのdiconファイルの「ビルドアクション」を「なし」に、「出力ディレクトリにコピー」を「新しい場合はコピーにする」にしたら一部テストが成功しました。

こんな感じです。

003

Logicクラスは成功しましたが、Daoクラスのテストが失敗しました。Exception発生時のエラーメッセージは以下の通り。

——————————————-

Message: 指定された名前付き接続は、構成内に見つからないか、EntityClient プロバイダと併用することを意図していないか、または無効です。

Type: System.ArgumentException
Source: System.Data.Entity
ParamName: null
TargetSite: Void ChangeConnectionString(System.String)
HelpLink: null
Stack:   場所 System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
   場所 System.Data.EntityClient.EntityConnection..ctor(String connectionString)
   場所 System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
   場所 System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
   場所 S2ContainerSample.ReadMailClicker..ctor() 場所 D:DevelopsampleS2ContainerSampleS2ContainerSampleClickResult.Designer.vb:行 27
   場所 S2ContainerSample.S2SampleDaoImpl.FindByServiceName(String ServiceName) 場所 D:DevelopsampleS2ContainerSampleS2ContainerSampleS2SampleDaoImpl.vb:行 7
   場所 S2ContainerSampleTest.S2SampleDaoTest.TestFindByServiceName2() 場所 D:DevelopsampleS2ContainerSampleS2ContainerSampleTestS2SampleDaoTest.vb:行 32

——————————————-

Web.configがビルド時にテストプロジェクト内にコピーされていないのが原因と思い、Web.configの「出力ディレクトリにコピー」を「新しい場合はコピー」に変更しましたが換わりませんでした。Daoはテストできなくてもいいかな...

ソースは以下です。

http://cid-5549d6c74ffbb345.skydrive.live.com/embedrowdetail.aspx/.Public/S2ContainerSample/S2ContainerSample|_20090426.zip

Written by david9142

2009年4月25日 @ 4:33 PM

カテゴリー: VisualBasic

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。