`
airu
  • 浏览: 270769 次
  • 性别: 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足以。

 

        

 

分享到:
评论

相关推荐

    学习了spring.net后写的小例子

    "SpringTest"这个文件名可能指的是作者创建的测试项目或测试类。在学习过程中,通过编写测试用例,作者可以验证Spring.NET框架的配置是否正确,组件间的关系是否按预期工作。使用单元测试框架(如NUnit或xUnit)与...

    C#和java的前沿技术课

    6. 测试驱动开发:了解TDD(Test-Driven Development)在C#(NUnit, MSTest)和Java(JUnit)中的实践方法,提升代码质量。 7. 容器化和Docker:学习使用Docker部署C#和Java应用程序,了解Kubernetes(K8s)等容器...

    Spring.net的经典例子

    在压缩包"SpringTest"中,我们可以预期找到以下几个关键部分: 1. **配置文件**:如`Spring.config`或`App.config`,其中包含了Spring.NET容器的配置信息,定义了对象定义、依赖关系以及AOP规则。 2. **代码示例**...

    Spring in action 2nd_code

    代码示例可能包含了使用Mockito、JUnit和Spring Test进行测试的实践。 通过研究这些代码示例,开发者不仅可以深化对Spring框架的理解,还能学习到如何在实际项目中有效利用Spring的各种功能。无论是初学者还是经验...

    Test-CICD:TestCICD

    在Test-CICD项目中,C#可能被用来编写应用程序的核心逻辑,或者构建自动化测试脚本。 4. 自动化测试: 在CI/CD流程中,自动化测试是关键组件。这可能包括单元测试、集成测试和端到端测试,它们通过代码来验证软件...

    spring.net的简单例子

    通过“SpringTest”这个项目,你可以实践上述的概念,例如创建一个简单的服务类,配置它的依赖,然后在控制台应用中使用IoC容器获取并调用这个服务。此外,还可以探索如何设置AOP规则以及事务管理,进一步理解Spring...

    springcloud-config配置中心配置1

    在`service-config-client`项目中,需要添加对Config Server的依赖,并在`bootstrap.yml`中指定`spring.cloud.config.uri`以连接Config Server。例如: ```yaml spring: cloud: config: uri: ...

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

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

    CS架构-spring.net-wcf.rar

    在压缩包"WK_spring_Frame_test"中,很可能包含了使用Spring.NET框架搭建的示例代码,以及关于动态WCF生成和三层结构分离的实现细节。通过分析这些文件,开发者可以学习如何在C/S架构中有效地整合Spring.NET和WCF,...

    基于Spring MVC的进销存管理系统源码.zip

    9. **单元测试与集成测试**:Spring MVC支持JUnit和Mockito等工具进行单元测试,以及Spring Boot的Test Slice进行集成测试,确保系统的稳定性和可靠性。 10. **RESTful API设计**:进销存系统可能需要提供API接口供...

    Mongodb入门教程、示例+Spring Boot完整示例+聚合.docx

    在 Spring Boot 中,可以使用 Spring Data MongoDB 来操作 MongoDB 数据库。 聚合 MongoDB 中的聚合操作主要是用于对数据进行批量处理和聚合操作。MapReduce 是 MongoDB 中的一种聚合操作方式。Map 函数调用 emit...

    SpringBoot微服务搭建代码下载 源码

    2. **Spring Boot配置**:学习如何在application.properties或application.yml文件中配置服务端和客户端的行为,包括服务器端口、数据库连接、日志级别等。 3. **RESTful API设计**:理解HTTP方法(GET, POST, PUT,...

    Eureka集群搭建.docx

    2. **添加依赖**:在`pom.xml`文件中,我们需要引入Spring Cloud的Eureka Server依赖,以及Spring Boot的测试依赖和热部署依赖,以便在开发过程中快速迭代和测试。 ```xml &lt;groupId&gt;org.springframework.cloud ...

    五子棋Test.zip

    游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统...

    JAVA_C#程序员面试宝典5

    【知识点详解】 ...以上内容详细介绍了JAVA和C#程序员面试中可能遇到的各种技术点,涵盖EJB、Struts、Spring、Hibernate、UML、数据库操作、多线程、MVC模式、版本控制、ORM和Web开发等多个方面。

    亲测可用,java 成功调用dll函数。包含调用回调函数,springboot版本。最近由于公司业务需要,要调用dll文件,用JNA调用。

    5. **示例工程`demo-test-dll`**:这个压缩包可能包含了演示如何在Spring Boot中使用JNA调用DLL的示例代码。通常,这将包含Java类、配置文件以及可能的DLL文件。开发者可以通过阅读和运行这些示例来理解如何实现这一...

    自动化测试的框架和技术体系.docx

    Spring Test 是 Spring 框架提供的集成测试工具,它允许开发者在 Spring 应用环境中进行测试,并支持依赖注入、事务管理等功能。 #### 示例代码 ```java import org.junit.jupiter.api.Test; import org.spring...

    mvcTest:后续的mvc教程

    这个“mvcTest”教程可能是为了帮助开发者深入理解C#中的ASP.NET MVC框架。接下来,我们将深入探讨MVC模式的核心概念以及C#中的实现。 **1. Model(模型)** 模型是应用程序的核心部分,负责处理业务逻辑和数据管理...

    五子棋小游戏test!GoBangGameSystem.zip

    游戏开始后,玩家在游戏设置中选择人机对战,则系统执黑棋,玩家自己执白棋。双方轮流下一棋,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。 【项目资源】:包含前端、后端、移动开发、操作系统...

    扫雷游戏test-213.zip

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

Global site tag (gtag.js) - Google Analytics