방법 테스트 중심 개발을위한 별도의 클래스를 개발하기위한 간단한 예제 콘솔 애플리케이션을 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/810465

문제

C#에서 단일 클래스를 개발하는 테스트 중심의 단일 클래스 개발을위한 템플릿 (또는 시작점)이 될 간단한 디버그 가능한 콘솔 애플리케이션을 작성하는 것입니다. 목적은이 콘솔 앱이 상주하는 간단한 폴더를 갖고 폴더를 붙여 넣기 만하면 새 프로젝트를 열고 새 클래스 작성을 시작하는 것입니다. 클래스가 테스트되는 모든 기능 (바람직하게는 테스트가 동일한 파일 (또는 최소한 네임 스페이스)에 있어야하자마자 클래스는 더 큰 프로젝트에 들어갈 수 있습니다. 나는 nunit 및 log4net을 사용하고 있습니다. "소규모 테스트 중심 장치 빌딩"접근 방식을 구현 한 방법. 코드 나 설명을 게시하십시오. 사용하지 않으면 설명을 제공하십시오. 왜 코드가 있습니다 (구성 데이터도 주석으로 붙여 넣습니다 ...)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using log4net.Config;
using NUnit.Framework;

namespace NUnitSimple
{

  class TheClassToTest_Substractor
  {

    private static readonly ILog logger =
         LogManager.GetLogger ( typeof ( TheClassToTest_Substractor ) );



    public static void Substract ( int intToSusbractFrom , int intToSubstract , ref int intTheResult)
    {
     intTheResult = intToSusbractFrom - intToSubstract ; 
    }


    static void Main ( string[] args )
    {
      DOMConfigurator.Configure (); //tis configures the logger 


      logger.Info ( " START " );
      logger.Info ( " Hit a key to exit " );
      Console.ReadLine ();


    } //eof method 



  } //eof class 

  [TestFixture]//telling NUnit that this class contains test functions 
public class TestTheClassToTest_Substractor
{ 

     [Test]//telling NUnit that this function should be run during the tests 
    public void TestSubstractOk() 
    { 
       int intToSusbractFrom = 10 ; 
       int intToSubstract = 4 ; 
        int intTheResult = 0 ;
       TheClassToTest_Substractor.Substract ( intToSusbractFrom , intToSubstract , ref intTheResult ) ;
        Assert.AreEqual (  6 , intTheResult);
    }



     [Test]//telling NUnit that this function should be run during the tests 
     public void TestSubstractNOK ()
     {
       int intToSusbractFrom = 10;
       int intToSubstract = 4;
       int intTheResult = 0;
       TheClassToTest_Substractor.Substract ( intToSusbractFrom, intToSubstract, ref intTheResult );
       Assert.AreNotEqual ( 3, intTheResult );
     }

} //eof class 


} //eof namespace 




#region TheAppConfig
/*
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net"
         type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  <log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <param name="File" value="Program.log" />
      <param name="AppendToFile" value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="Header" value="[Header] \r\n" />
        <param name="Footer" value="[Footer] \r\n" />
        <param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" />
      </layout>
    </appender>

    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>


    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.2.10.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="data source=ysg;initial catalog=DBGA_DEV;integrated security=true;persist security info=True;" />
      <commandText value="INSERT INTO [DBGA_DEV].[ga].[tb_Data_Log] ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />

      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout" value="%thread" />
      </parameter>
      <parameter>
        <parameterName value="@log_level" />
        <dbType value="String" />
        <size value="50" />
        <layout type="log4net.Layout.PatternLayout" value="%level" />
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="255" />
        <layout type="log4net.Layout.PatternLayout" value="%logger" />
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.PatternLayout" value="%messag2e" />
      </parameter>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="LogFileAppender" />
      <appender-ref ref="AdoNetAppender" />
      <appender-ref ref="ColoredConsoleAppender" />
    </root>
  </log4net>
</configuration>
 */
#endregion TheAppconfig

#region TheXmlReferingToTheNUnitAndLog4NetInNUnitSimple.csprojFile
/*
     <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\Log4Net\log4net-1.2.10\bin\net\2.0\release\log4net.dll</HintPath>
    </Reference>
    <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL" />
 */
#endregion
도움이 되었습니까?

해결책

AA 프로젝트를 설정 한 다음 자르고 붙여 넣기보다는 다음과 같은 스크립트 도구를 보지 않으십시오. 나무 외과 의사 프로젝트 구조를 설정합니다. 솔루션, 프로젝트 및 프로젝트 폴더를 설정합니다. Nunit과 Nant의 기능이 포함됩니다.

프로젝트 홈페이지 하단에 미러링 된 블로그 게시물을 살펴보십시오.

BTW : 콘솔 앱에서 Jon Skeet에 동의합니다. 유용 할 수 있지만 TestDriven.net vs.2005 이상 또는 vs.2008 테스트 도구의 경우 자신의 하네스 앱을 만들지 않고도 테스트 코드로 들어갈 수 있습니다.

다른 팁

기존 테스트 프로젝트의 새로운 테스트 클래스를 포함하여 기존 프로젝트에 새로운 클래스를 포함하여 혜택이 무엇인지 실제로는 알 수 없습니다.

콘솔 앱을 소개하는 이유는 무엇입니까? 기존 테스트 러너 중 하나가 아닌 콘솔 앱에서 테스트를 실행해야합니까? (나를 잘못 이해하지 마십시오. 저는 콘솔 앱의 열렬한 팬입니다. 여기에 어떻게 적합한 지 모르겠습니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top