.NET—Spring.NET保持数据现场测试
2016-06-25 19:44
661 查看
.NET—Spring.NET保持数据现场测试
解:
这个版本提供两种方式进行测试:1、破坏现场测试;2、恢复现场测试
Nunit2.5.5与VS2008集成
赵海燕
20160625
关键点,配置文件实现bean注入初始化,AdoTemplate可以直接取数据库数据,前一个实现控制反转,后一个是ADO.NET的封装。
1.1 项目地址:
Svn项目地址:
https://cyberzhaohyVM/svn/SmartCode/Spring.NET保持数据现场测试20160625
1.2 项目结构:
1.3 AccountManager
黄色为启动事务;构造函数时注入。
using System;
using System.Data;
using Spring.Transaction;
using Spring.Transaction.Interceptor;
using Spring.TxQuickStart.Dao;
namespace Spring.TxQuickStart.Services
{
public class AccountManager : IAccountManager
{
}
1.4 application-config.xml
黄色为初始化注入
* Copyright ?2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
4000
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an “AS IS” BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Collections;
using System.Data;
using NUnit.Framework;
using Spring.Aop.Config;
using Spring.Context;
using Spring.Context.Support;
using Spring.Data.Common;
using Spring.Data.Config;
using Spring.Data.Core;
using Spring.Objects.Factory.Support;
using Spring.Objects.Factory.Xml;
using Spring.Transaction.Config;
using Spring.TxQuickStart.Services;
{
[TestFixture]
public class AccountManagerTests
{
private AdoTemplate adoTemplateCredit;
private AdoTemplate adoTemplateDebit;
// “assembly://Spring.TxQuickStart.Tests/Spring.TxQuickStart/system-test-dtc-config.xml”
);
}
}
1.7 system-test-local-config.xml
黄色代码,整合了被测试类bean文件。
* Copyright ?2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an “AS IS” BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Collections;
using System.Data;
using NUnit.Framework;
using Spring.Aop.Config;
using Spring.Context;
using Spring.Context.Support;
using Spring.Data.Common;
using Spring.Data.Config;
using Spring.Data.Core;
using Spring.Objects.Factory.Support;
using Spring.Objects.Factory.Xml;
using Spring.Transaction.Config;
using Spring.TxQuickStart.Services;
using Spring.Testing.NUnit;
{
[TestFixture]
public class AccountManagerTestsTransaction : AbstractTransactionalDbProviderSpringContextTests
{
protected override string[] ConfigLocations
{
get
{
return new String[] { “assembly://Spring.TxQuickStart.Tests/Spring.TxQuickStart/system-test-local-config.xml” };
}
}
private AdoTemplate adoTemplateCredit;
private AdoTemplate adoTemplateDebit;
}
1.10 使用nunit2.5.5
在vs2008中集成nunit
\vmware-host\Shared Folders\F\软件安装包\单元测试\ NUnit-2.5.5.10112.msi
在一个类库的项目新建一个类,加入如下代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Spring
{
class Program
{
static void Main(string[] args)
{
}
}
}
修改项目属性:
在VS2008选中测试项目直接启动,就可以启动nunit
设置好nunit为当前项目exe所在路径,就可以进行断点调试了。
1.11 测试效果:
解:
这个版本提供两种方式进行测试:1、破坏现场测试;2、恢复现场测试
Nunit2.5.5与VS2008集成
赵海燕
20160625
关键点,配置文件实现bean注入初始化,AdoTemplate可以直接取数据库数据,前一个实现控制反转,后一个是ADO.NET的封装。
1.1 项目地址:
Svn项目地址:
https://cyberzhaohyVM/svn/SmartCode/Spring.NET保持数据现场测试20160625
1.2 项目结构:
1.3 AccountManager
黄色为启动事务;构造函数时注入。
using System;
using System.Data;
using Spring.Transaction;
using Spring.Transaction.Interceptor;
using Spring.TxQuickStart.Dao;
namespace Spring.TxQuickStart.Services
{
public class AccountManager : IAccountManager
{
private IAccountCreditDao accountCreditDao; private IAccountDebitDao accountDebitDao; private float maxTransferAmount = 1000000; public AccountManager(IAccountCreditDao accountCreditDao, IAccountDebitDao accountDebitDao) { this.accountCreditDao = accountCreditDao; this.accountDebitDao = accountDebitDao; } public float MaxTransferAmount { get { return maxTransferAmount; } set { maxTransferAmount = value; } } // The following rollback rule will result in commiting of only work done // by the CreateCreate DAO method. The exception is still propagated out to the // calling code. // [Transaction(NoRollbackFor = new Type[] { typeof(ArithmeticException) })] [Transaction(TransactionPropagation.Required)] public void DoTransfer(float creditAmount, float debitAmount) { accountCreditDao.CreateCredit(creditAmount); if (creditAmount > maxTransferAmount || debitAmount > maxTransferAmount) { throw new ArithmeticException("see a teller big spender..."); } accountDebitDao.DebitAccount(debitAmount); } }
}
1.4 application-config.xml
黄色为初始化注入
region License
/** Copyright ?2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
4000
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an “AS IS” BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
endregion
region Imports
using System;using System.Collections;
using System.Data;
using NUnit.Framework;
using Spring.Aop.Config;
using Spring.Context;
using Spring.Context.Support;
using Spring.Data.Common;
using Spring.Data.Config;
using Spring.Data.Core;
using Spring.Objects.Factory.Support;
using Spring.Objects.Factory.Xml;
using Spring.Transaction.Config;
using Spring.TxQuickStart.Services;
endregion
namespace Spring.TxQuickStart{
[TestFixture]
public class AccountManagerTests
{
private AdoTemplate adoTemplateCredit;
private AdoTemplate adoTemplateDebit;
private IAccountManager accountManager; [SetUp] public void SetUp() { // Configure Spring programmatically NamespaceParserRegistry.RegisterParser(typeof(DatabaseNamespaceParser)); NamespaceParserRegistry.RegisterParser(typeof(TxNamespaceParser)); NamespaceParserRegistry.RegisterParser(typeof(AopNamespaceParser)); IApplicationContext context = CreateContextFromXml(); IDictionary dict = context.GetObjectsOfType(typeof (IAccountManager)); accountManager = context["accountManager"] as IAccountManager; CleanDb(context); } private static IApplicationContext CreateContextFromXml() { return new XmlApplicationContext( // use for demoing ado tx manager "assembly://Spring.TxQuickStart.Tests/Spring.TxQuickStart/system-test-local-config.xml" // use for demoing TransactionScope tx manager
// “assembly://Spring.TxQuickStart.Tests/Spring.TxQuickStart/system-test-dtc-config.xml”
);
}
[Test] public void TransferBelowMaxAmount() { accountManager.DoTransfer(217, 217); //asserts to read from db... int numCreditRecords = (int)adoTemplateCredit.ExecuteScalar(CommandType.Text, "select count(*) from Credits"); int numDebitRecords = (int)adoTemplateDebit.ExecuteScalar(CommandType.Text, "select count(*) from Debits"); Assert.AreEqual(1, numCreditRecords); Assert.AreEqual(1, numDebitRecords); } [Test] public void TransferAboveMaxAmount() { try { accountManager.DoTransfer(2000000, 200000); Assert.Fail("Should have thrown Arithmethic Exception"); } catch (ArithmeticException) { int numCreditRecords = (int)adoTemplateCredit.ExecuteScalar(CommandType.Text, "select count(*) from Credits"); int numDebitRecords = (int)adoTemplateDebit.ExecuteScalar(CommandType.Text, "select count(*) from Debits"); Assert.AreEqual(0, numCreditRecords); Assert.AreEqual(0, numDebitRecords); } } // Run the following test only if you have changed to the alternate implementation // of the method DoTransfer in AccountManager that specifies the NoRollbackFor property. [Test] [Ignore("Change impl of AccountManager as shown before running this test")] public void TransferAboveMaxAmountNoRollbackFor() { try { accountManager.DoTransfer(2000000, 2000000); Assert.Fail("Should have thrown Arithmethic Exception"); } catch (ArithmeticException) { int numCreditRecords = (int)adoTemplateCredit.ExecuteScalar(CommandType.Text, "select count(*) from Credits"); int numDebitRecords = (int)adoTemplateDebit.ExecuteScalar(CommandType.Text, "select count(*) from Debits"); Assert.AreEqual(1, numCreditRecords); Assert.AreEqual(0, numDebitRecords); } } private void CleanDb(IApplicationContext context) { IDbProvider dbProvider = (IDbProvider)context["DebitDbProvider"]; adoTemplateDebit = new AdoTemplate(dbProvider); adoTemplateDebit.ExecuteNonQuery(CommandType.Text, "truncate table Debits"); dbProvider = (IDbProvider)context["CreditDbProvider"]; adoTemplateCredit = new AdoTemplate(dbProvider); adoTemplateCredit.ExecuteNonQuery(CommandType.Text, "truncate table Credits"); } }
}
1.7 system-test-local-config.xml
黄色代码,整合了被测试类bean文件。
region License
/** Copyright ?2002-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the “License”);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an “AS IS” BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
endregion
region Imports
using System;using System.Collections;
using System.Data;
using NUnit.Framework;
using Spring.Aop.Config;
using Spring.Context;
using Spring.Context.Support;
using Spring.Data.Common;
using Spring.Data.Config;
using Spring.Data.Core;
using Spring.Objects.Factory.Support;
using Spring.Objects.Factory.Xml;
using Spring.Transaction.Config;
using Spring.TxQuickStart.Services;
using Spring.Testing.NUnit;
endregion
namespace Spring.TxQuickStart{
[TestFixture]
public class AccountManagerTestsTransaction : AbstractTransactionalDbProviderSpringContextTests
{
protected override string[] ConfigLocations
{
get
{
return new String[] { “assembly://Spring.TxQuickStart.Tests/Spring.TxQuickStart/system-test-local-config.xml” };
}
}
private AdoTemplate adoTemplateCredit;
private AdoTemplate adoTemplateDebit;
private IAccountManager accountManager; [SetUp] public void SetUp() { //没什么用 //this.DefaultRollback = true; this.DefaultRollback = false; // Configure Spring programmatically NamespaceParserRegistry.RegisterParser(typeof(DatabaseNamespaceParser)); NamespaceParserRegistry.RegisterParser(typeof(TxNamespaceParser)); NamespaceParserRegistry.RegisterParser(typeof(AopNamespaceParser)); IDictionary dict = applicationContext.GetObjectsOfType(typeof(IAccountManager)); accountManager = applicationContext["accountManager"] as IAccountManager; CleanDb(applicationContext); } [Test] public void TransferBelowMaxAmount() { accountManager.DoTransfer(217, 217); //asserts to read from db... int numCreditRecords = (int)adoTemplateCredit.ExecuteScalar(CommandType.Text, "select count(*) from Credits"); int numDebitRecords = (int)adoTemplateDebit.ExecuteScalar(CommandType.Text, "select count(*) from Debits"); Assert.AreEqual(1, numCreditRecords); Assert.AreEqual(1, numDebitRecords); } [Test] public void TransferAboveMaxAmount() { try { accountManager.DoTransfer(2000000, 200000); Assert.Fail("Should have thrown Arithmethic Exception"); } catch (ArithmeticException) { int numCreditRecords = (int)adoTemplateCredit.ExecuteScalar(CommandType.Text, "select count(*) from Credits"); int numDebitRecords = (int)adoTemplateDebit.ExecuteScalar(CommandType.Text, "select count(*) from Debits"); Assert.AreEqual(0, numCreditRecords); Assert.AreEqual(0, numDebitRecords); } } // Run the following test only if you have changed to the alternate implementation // of the method DoTransfer in AccountManager that specifies the NoRollbackFor property. [Test] [Ignore("Change impl of AccountManager as shown before running this test")] public void TransferAboveMaxAmountNoRollbackFor() { try { accountManager.DoTransfer(2000000, 2000000); Assert.Fail("Should have thrown Arithmethic Exception"); } catch (ArithmeticException) { int numCreditRecords = (int)adoTemplateCredit.ExecuteScalar(CommandType.Text, "select count(*) from Credits"); int numDebitRecords = (int)adoTemplateDebit.ExecuteScalar(CommandType.Text, "select count(*) from Debits"); Assert.AreEqual(1, numCreditRecords); Assert.AreEqual(0, numDebitRecords); } } private void CleanDb(IApplicationContext context) { IDbProvider dbProvider = (IDbProvider)context["DebitDbProvider"]; adoTemplateDebit = new AdoTemplate(dbProvider); adoTemplateDebit.ExecuteNonQuery(CommandType.Text, "truncate table Debits"); dbProvider = (IDbProvider)context["CreditDbProvider"]; adoTemplateCredit = new AdoTemplate(dbProvider); adoTemplateCredit.ExecuteNonQuery(CommandType.Text, "truncate table Credits"); } }
}
1.10 使用nunit2.5.5
在vs2008中集成nunit
\vmware-host\Shared Folders\F\软件安装包\单元测试\ NUnit-2.5.5.10112.msi
在一个类库的项目新建一个类,加入如下代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Spring
{
class Program
{
static void Main(string[] args)
{
}
}
}
修改项目属性:
在VS2008选中测试项目直接启动,就可以启动nunit
设置好nunit为当前项目exe所在路径,就可以进行断点调试了。
1.11 测试效果:
相关文章推荐
- java之详解匿名内部类
- SpringMVC和Struts2的区别
- 使用Spring AOP和Cookie做网站免登陆
- 学习Java中遇到的一些问题
- java 类反射机制
- java实现冒泡排序
- JAVA异常体系
- TreeMap的实现
- javax.persistence.Table.indexes()[Ljavax/persistence/Index错误解决
- 【SpringMVC学习09】SpringMVC与前台的json数据交互
- 好好温习下java容器类
- java实现整数选择排序
- springMVC浏览器接受json报406错误的解决方法
- maven+springmvc+mybatis项目从properties读数据库连接属性时拿不到连接,的研究与解决方案
- Eclipse 官方简体中文语言包下载地址及安装方法
- 控制执行流程 Thinking in Java 第四章
- Ubuntu12.04安装java8
- struts2文件上传
- eclipse中maven项目jar包不会自动下载解决办法
- [疯狂Java]面向对象:基本类型的包装器类型、自动装箱/拆箱、包装器类型大小/相等比较