[seasar-dotnet:1029] QuillTestCaseのトランザクションについて
k.moriwaki
[E-MAIL ADDRESS DELETED]
2008年 10月 21日 (火) 17:50:23 JST
森脇と申します。
DBFluteのサンプルソース(dbflute-nbasic-example)と同じような
Bhvのテストケースを作成し、MbUnitで実行したのですがトランザクションが
ロールバックされない現象が起きました。
MbUnitのGUIに表示されているログは「ロールバックされました」と表示されているのですが、
実際にはDBにInsertされており、二回目以降でPK重複エラーになってしまいます。
動きで気になる点としては以下のような感じです。
a.Insertを初回に実行するとロールバックされる
b.SelectEntityを実行後にInsertが実行されるとロールバックしない
dbflute-nbasic-exampleに同梱されていたMbUnitを使用しており、
そちらのテストケースはすべて成功します。
以下に挙げる設定で何か不足している点などありますでしょうか?
環境
OS:Windows XP SP3
言語:VB(.NET Framework2.0)
開発環境:VisualStudio 2005
DB:Oracle 10.1.0.2.0
S2Container.NET,S2Dao.NET:1.3.12
DBFlute 0.8.1
----- MbUnitのログ -----
INFO (Logger#Info():0) - [IQLL0003]Quill設定ファイル(ある=true,なし=false):True
DEBUG (Logger#Log():0) - 論理的なコネクションを取得しました
DEBUG (Logger#Log():0) - トランザクションを開始しました
DEBUG (S2DaoMetaDataFactoryImpl#GetDaoMetaData():68) - ...Creating
daoMetaData for 'CodeMstDao'.
DEBUG (S2DaoMetaDataExtension#GetSqlCommand():76) -
...Initializing sqlCommand for Insert().
DEBUG (XLog#Log():21) -
/========================================================================
DEBUG (XLog#Log():21) -
CodeMstBhv.Insert()
DEBUG (XLog#Log():21) -
==================/
DEBUG (QLog#Log():22) - INSERT INTO CODE_MST (NAME, CODE,
VERSION_NO) VALUES ('テスト', '999', 0)
DEBUG (XLog#Log():21) - ===========/ [00m00s016ms - Result: 1]
DEBUG (XLog#Log():21) -
DEBUG (Logger#Log():0) - トランザクションをロールバックしました
DEBUG (Logger#Log():0) - 論理的なコネクションを閉じました
----- 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>
<quill>
<dataSources>
<dataSource name="KankyoDB">
<provider>Oracle</provider>
<connectionString>"Data Source=hogedb;User
Id=hoge;Password=hoge;"</connectionString>
<class>Seasar.Extension.Tx.Impl.TxDataSource</class>
</dataSource>
</dataSources>
<assemblys>
<assembly>System.Data.OracleClient, version=2.0.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089</assembly>
</assemblys>
</quill>
<log4net>
<appender name="DebugLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="C:\tmp\log\dbflute-nbasic-example-debug.log"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%t] %-5level
(%C{1}#%M():%L) - %m%n"/>
</layout>
</appender>
<appender name="DebugConsoleAppender"
type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5level (%C{1}#%M():%L) - %m%n"/>
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="DebugConsoleAppender"/>
</root>
</log4net>
</configuration>
----- App.config -----
namespace App.DB.Example.DBFlute
{
[TestFixture]
public class BehaviorTest : QuillTestCase
{
/// <summary>
/// Log
/// </summary>
private static readonly log4net.ILog m_log =
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// BehaviorSelector
/// </summary>
protected BehaviorSelector m_Selector;
/// <summary>
/// Setup
/// </summary>
[MbUnit.Framework.SetUp]
public void Before()
{
log4net.Config.XmlConfigurator.Configure();
AccessContext context = new AccessContext();
context.AccessTimestamp = DateTime.Now;
context.AccessUser = "testUser";
context.AccessProcess = "testProcess";
AccessContext.SetAccessContextOnThread(context);
}
/// <summary>
/// TearDown
/// </summary>
[MbUnit.Framework.TearDown]
public void After()
{
AccessContext.ClearAccessContextOnThread();
}
/// <summary>
/// selectEntity
/// </summary>
[Test, Quill(Tx.Rollback)]
public void SelectEntity()
{
// ## Arrange ##
CodeMstCB cb = new CodeMstCB();
cb.Query().SetCode_Equal("01");
// ## Act ##
CodeMstBhv bhv = m_Selector.Select<CodeMstBhv>();
CodeMst code = bhv.SelectEntity(cb);
// ## Assert ##
m_log.Debug(code.ToString());
Assert.AreEqual("01", code.Code);
}
/// <summary>
/// Insert
/// </summary>
[Test, Quill(Tx.Rollback)]
public void Insert()
{
// ## Arrange ##
CodeMst code = new CodeMst();
code.Code = "999";
code.Name = "テスト";
// ## Act ##
CodeMstBhv bhv = m_Selector.Select<CodeMstBhv>();
bhv.Insert(code);
}
}
}
seasar-dotnet メーリングリストの案内