`
airu
  • 浏览: 267403 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

C#中的Spring Test

 
阅读更多

C#中也是可以使用Spring的。这里主要是记录下如何使用Spring来做单元测试。

首先,开发工具是vs2012 ,我们使用 nuget来获取需要的软件包,类似maven

然后,需要spring开发包 可以通过nuget来管理。如果没有就自己找找。

应该有 Spring.Aop

           Spring.Core

           Spring.Data

           Spring.Testing.Microsoft

接下来就是 我们的测试抽象类

namespace MyApp.Core.Test
{
     public abstract class AbstractSpringTestCase : AbstractDependencyInjectionSpringContextTests
    {

        public AbstractSpringTestCase()
        {
            // switch on field level injection
            PopulateProtectedVariables = true;
        }

        protected override string[] ConfigLocations
        {
            get
            {
                return new string[] { "assembly://MyApp/AppCore/AppContext.xml" 
                                      ,"assembly://MyApp/AppTran/AppContext.xml"
                };
            }
        }

    }
}

 这里继承了AbstractDependencyInjectionSpringContextTests 类。我们的类主要是加载配置文件。

这里就贴个配置文件上来,和java中的spring类似。

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" xmlns:nms="http://www.springframework.net/nms" default-lazy-init="true" >




  <!-- =========================================================================== -->
  <!-- App manager                                                           -->
  <!-- =========================================================================== -->


  <object id="appManager" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="appManagerTarget" type="MyApp.Collector.DefaultAppManager, MyApp" init-method="Init" destroy-method="Cleanup">
        <property name="appFactory" ref="appFactory"  />
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>

  <object id="appFactory" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="appFactoryTarget" type="MyApp.Collector.DefaultAppFactory, MyApp" >
        <property name="forwarderFactory" ref="forwarderFactory"  />
        <property name="winAppFactory" ref="winAppFactory"  />
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>

  <object id="winCollectorFactory" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="winAppFactoryTarget" type="MyApp.Collector.Windows.WinAppFactory, MyApp">
        <property name="eventHostManager" ref="eventHostManager"  />
        <lookup-method name="CreateWinMockApp" object="winMockApp"/>
        <lookup-method name="CreateCmdApp" object="cmdApp"/>
        <lookup-method name="CreateGUIApp" object="GUIApp"/>
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>

  <object id="winEventReaderFactory" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="winEventReaderFactoryTarget" type="MyApp.Collector.Windows.WinEventReaderFactory, MyApp">
        <property name="eventHostManager" ref="eventHostManager"  />
        <lookup-method name="CreateWinMockEventReader" object="winMockEventReader"/>
        <lookup-method name="CreateCmdEventReader" object="cmdEventReader"/>
        <lookup-method name="CreateGUIEventReader" object="GUIEventReader"/>
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>

  <!-- =========================================================================== -->
  <!-- EventHost                                                           -->
  <!-- =========================================================================== -->
  <object id="eventHostFactory" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="eventHostFactoryTarget" type="MyApp.Collector.Windows.Host.DefaultEventHostFactory, MyApp" >
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>

  <object id="eventHostManager" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="eventHostManagerTarget" type="MyApp.Collector.Windows.Host.DefaultEventHostManager, MyApp" >
        <property name="eventHostFactory" ref="eventHostFactory"  />
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>
  
  

  <!-- =========================================================================== -->
  <!-- forwarder factory                                                           -->
  <!-- =========================================================================== -->

  <object id="forwarderFactory" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="target">
      <object name="forwarderFactoryTarget" type="MyApp.Forwarder.DefaultForwarderFactory, MyApp" >
        <property name="connectionFactory" ref="connectionFactory"  />
        <property name="sendEventMeter" ref="sendEventMeter"  />
      </object>
    </property>
    <property name="interceptorNames">
      <list>
        <value>loggingAdvice</value>
      </list>
    </property>
  </object>

  <!-- =========================================================================== -->
  <!-- Meter factory                                                           -->
  <!-- =========================================================================== -->

  <object name="receiveEventMeter" type="MyApp.Meter.DefaultEventMeter, MyApp" init-method="Init"  >
    <property name="categoryName" value="MyAPP Receiver"  />
  </object>

  <object name="sendEventMeter" type="MyApp.Meter.DefaultEventMeter, MyApp" init-method="Init"  >
    <property name="categoryName" value="MyAPP Sender"  />
  </object>

  <!-- =========================================================================== -->
  <!-- prototype aop is configure differently                                      -->
  <!-- =========================================================================== -->

  <object type="Spring.Aop.Framework.AutoProxy.DefaultAdvisorAutoProxyCreator">
    <property name="interceptorNames" value="loggingAdvicePrototype"/>
  </object>

  <object id="winMockApp" type="MyApp.Collector.Windows.Mock.WinMockApp, MyApp" singleton="false">
    <property name="winEventReaderFactory" ref="winEventReaderFactory"/>
    <property name="eventHostManager" ref="eventHostManager"/>
  </object>

  <object id="winMockEventReader" type="MyApp.Collector.Windows.Mock.WinMockEventReader, MyApp" singleton="false">
    <property name="receiveEventMeter" ref="receiveEventMeter"/>
  </object>

  <object id="GUIApp" type="MyApp.Collector.Windows.GUI.GUIApp, MyApp" singleton="false">
    <property name="winEventReaderFactory" ref="winEventReaderFactory"/>
    <property name="eventHostManager" ref="eventHostManager"/>
  </object>

  <object id="GUIEventReader" type="MyApp.Collector.Windows.GUI.GUIEventReader, MyApp" singleton="false">
    <property name="receiveEventMeter" ref="receiveEventMeter"/>
    <property name="remoteEventProviderResources" ref="remoteEventProviderResources"/>
  </object>


  <object id="vistaFamilyCollector" type="MyApp.Collector.Windows.Cmd.CmdApp, MyApp" singleton="false">
    <property name="winEventReaderFactory" ref="winEventReaderFactory"/>
    <property name="eventHostManager" ref="eventHostManager"/>
  </object>

  <object id="vistaFamilyEventReader" type="MyApp.Collector.Windows.Cmdd.CmdEventReader, MyApp" singleton="false">
    <property name="receiveEventMeter" ref="receiveEventMeter"/>
  </object>

  <object id="remoteEventProviderResources" type="MyApp.Collector.Windows.GUI.DefaultRemoteEventProviderResources, MyApp">
  </object>

  <object id="impersonateUserFactory"       type="MyApp.Collector.Windows.GUI.DefaultImpersonateUserFactory, MyApp">
  </object>
  
  <!-- =========================================================================== -->
  <!-- Logging                                                                    -->
  <!-- =========================================================================== -->

  <object name="loggingAdvice" type="Spring.Aspects.Logging.SimpleLoggingAdvice, Spring.Aop" >
    <property name="LogUniqueIdentifier" value="true"/>
    <property name="LogExecutionTime"    value="true"/>
    <property name="LogMethodArguments"  value="true"/>
    <property name="LogReturnValue"      value="true"/>

    <property name="Separator"           value=";"/>
    <property name="LogLevel"            value="Info"/>


    <property name="HideProxyTypeNames"  value="true"/>
    <property name="UseDynamicLogger"    value="true"/>
  </object>

  <object name="loggingAdvicePrototype" type="Spring.Aspects.Logging.SimpleLoggingAdvice, Spring.Aop" singleton="false">
    <property name="LogUniqueIdentifier" value="true"/>
    <property name="LogExecutionTime"    value="true"/>
    <property name="LogMethodArguments"  value="true"/>
    <property name="LogReturnValue"      value="true"/>

    <property name="Separator"           value=";"/>
    <property name="LogLevel"            value="Info"/>


    <property name="HideProxyTypeNames"  value="true"/>
    <property name="UseDynamicLogger"    value="true"/>
  </object>

  <object type="Spring.Objects.Factory.Attributes.RequiredAttributeObjectPostProcessor, Spring.Core"/>

  <!-- =========================================================================== -->
  <!-- JMS                                                                         -->
  <!-- =========================================================================== -->
  

  <object id="connectionFactory" type="Apache.NMS.ActiveMQ.ConnectionFactory, Apache.NMS.ActiveMQ">
    <constructor-arg index="0" value="failover:(tcp://localhost:${BROKER_PORT})"/>
  </object>

  <!-- =========================================================================== -->
  <!-- Configuration                                                               -->
  <!-- =========================================================================== -->

  <object name="propertyPlaceHolderConfigurer" type="Spring.Objects.Factory.Config.PropertyPlaceHolderConfigurer, Spring.Core">
    
    <property name="EnvironmentVariableMode" value="Override"/>

    <property name="Properties">
      <name-values>
        <add key="BROKER_PORT" value="61616"/>
      </name-values>
    </property>
  </object>
  
</objects>

 

这个是配置文件是实际工作中用到的,略加修改。我们看到很多,使用了Spring的AOP,虽然我很不喜欢AOP,也觉得这里用的很牵强。

接下来,就是测试类了,这里的注入,我们不许要使用注解。当然C#里的注解又是另外一个模样。

还是直接看代码

 

namespace MyApp.Core.Test
{
    [TestClass]
    public class WinMockAppTest : AbstractSpringTestCase
    {
        protected IAppManager appManager;

        [TestMethod]
        public void testWinMockApp()
        {
        //do the test
        //such as
        Assert.IsNotNull(appManager);
        }
    }
}

 TestClass和TestMethod足以。

 

        

 

分享到:
评论

相关推荐

    消息订阅模式之拉模式的实现平台 C#语言

    这是1.0版 ,2.0版已上传请关注我的...TestProject1是单元测试 TestEventDriveWebApplication是web项目的测试 本平台永远开源!没有任何限制! 发现bug请email:273082449@qq.com 或QQ:273082449 欢迎各位网友反馈bug

    Test-CICD:TestCICD

    Test-CICD:TestCICD

    扫雷游戏test-213.zip

    这个C#实现的小游戏是一个简单的猜数字游戏,让玩家猜一个1到100之间的随机生成的数字。以下是对这个小游戏的分析: Random 类的使用:游戏开始时,使用 Random 类生成一个1到100之间的随机数作为要猜的数字。 ...

    GameJam-Test:2015 年Spring游戏果酱测试库

    GameJam-测试game jam Spring 2015 Spring 2015 左铭第一次提交的测试库肖恩的第一次提交克拉克的第一次提交Sarina 的第一个 COMMIMITMTIMTTITITI 左铭第一​​家分店

    初级程序员模拟考试系统

    Android、供应链、财务、百度推广、XML、Test、Struts2、Struts、SQLBase、SQLA、Spring、SEO、PHP、PatternDesign、Oracle、OOAD、NNTC、Moblie、Linux、JSP、Jquery、JNTC、Javascrip{过滤}t、JavaOOP、JavaBase、...

    mvcTest:后续的mvc教程

    mvcTest:后续的mvc教程

    Wrox.Professional.Enterprise.dot.NET.Oct.2009.pdf

    It covers the tools you will use in addition to Visual Studio, including Spring.NET and nUnit, and applies to development with ASP.NET, C#, VB, Office (VBA), and database. You will find ...

    asp.net知识库

    理解C#中的委托[翻译] 利用委托机制处理.NET中的异常 与正则表达式相关的几个小工具 你真的了解.NET中的String吗? .NET中的方法及其调用(一) 如何判断ArrayList,Hashtable,SortedList 这类对象是否相等 帮助解决...

    SSH2项目(WeExam)源码

    2、修改src/jdbc.properties内的连接参数,及test/hibernate.cfg.xml(用于单元测试)的连接参数 3、打开一下连接初始化数据库:http://127.0.0.1:8080/WeExam/initialize 4、管理后台为:...

    ASP.NET MVC in Action

    ASP.NET MVC in Action shows you how to test each piece of your ASP.NET application and how to introduce principles of test-driven development into your process. Because the framework is completely ...

    Note_scalad.tar.gz

    C# CROS CrossOrigin_Request Eclipse_Referenced_File_Contains_Errors Git_Language_Show Gradle_Denpendencies_Exclude Gradle_Denpendency_Management Gradle_Gretty Gradle_Linux_Install Gradle_STS_Create ...

    Professional Enterprise .NET

    development and is especially geared towards people with C# and ASP.NET development experience. This book does not intend to be a definitive all - in - one resource for all things enterprise. ...

    Test-Task-Calendar

    测试任务日历

    desafioJava:desafioJava

    REST API应该使用Spring的Java / Kotlin或.NET Core的C#编写。 数据库不是必需的。 将评估什么: 代码和解决方案的质量 您应该使用(在此存储库上)的资源: 的和的 ,每一个都有公司在2021/02/10到2021/02/18...

    k8s-grpc-dotntecore:此存储库包含在.net cre 3.0中创建测试和部署grpc服务器的分步指南。 它还包括示例应用程序和yaml文件

    在C#(.NET Core 3.0)中grpc 使用grpcurl 在Azure Kubernetes(aks)中 先决条件 您具有最新版本的Visual Studio。 您已经安装了.NET Core 3.0。 拥有Visual Studio Code很好。 您有一个Azure订阅。 您有一个...

Global site tag (gtag.js) - Google Analytics