Wie zu einer einfachen Beispiel Konsolenanwendung für die Entwicklung separate Klassen für Testgetriebene Entwicklung zu schaffen?

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

Frage

Meine Absicht ist es, eine einfache leicht debug Konsole-Anwendung zu erstellen, die die Vorlage (oder Startpunkt) werden für Test einzelne Klassen in C # angetrieben zu entwickeln. Der Zweck ist es, einen einfachen Ordner zu haben, wo diese Konsole App befinden wird und kopieren Sie einfach den Ordner, um das neue Projekt öffnen einfügen und starten Sie die neue Klasse zu schreiben. Sobald die Klasse alle Funktionalitäten getestet (Vorzugsweise werden die Tests sollten in der gleichen Datei (oder zumindest Namespace) die Klasse in das größere Projekt gehen darf. Ich bin mit NUnit und log4net. Wenn Sie Sie diese Art tun von „kleine Test angetriebene Einheit Gebäude“ -Ansatz, wie haben Sie es umgesetzt werden. Bitte, einen Code oder eine Erklärung abgeben. Wenn Sie nicht verwenden, geben Sie bitte Erklärung, warum? Hier wird der Code (die Konfigurationsdaten werden auch als Kommentare einfügen ...)

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
War es hilfreich?

Lösung

Anstatt aa Projekt einrichten und dann Ausschneiden und Einfügen, warum sie nicht an einem Skript-Tool wie Baum-Chirurg zur Einrichtung einer Projektstruktur. Dies wird Ihre Lösung, Projekte und Projektordner einrichten. Es enthält Funktionen für beide nUnit und nAnt.

Seien Sie sicher an den Blog-Beiträge im unteren Bereich der Homepage des Projekts gespiegelt suchen.

BTW: Ich mit Jon Skeet auf Konsole apps zustimmen. Sie können nützlich sein, aber wenn Sie ein Tool wie TestDriven.Net VS.2005 und früher oder die VS.2008 Test-Tools können Sie Ihren Testcode sollte in ohne eigene Gurtzeug App zu schaffen.

Andere Tipps

ich nicht wirklich sehen, was der Nutzen über die neue Klasse in dem bestehenden Projekt einschließlich, einschließlich der neuen Testklasse im bestehenden Testprojekt, und die Tests dort ausgeführt wird.

Warum eine Konsole App vorstellen? Haben Sie wirklich brauchen die Tests von einer Konsole App laufen, anstatt von einem der bestehenden Testläufer? (Sie mich nicht falsch, ich bin ein großer Fan von Konsolenanwendungen -. Ich meine nicht nur sehen, wie sie passen hier in)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top