Testen mit NUnit

Testbasierte Entwicklung ist schon eine schöne Sache, vor allem bei größeren Projekten. Mit Hilfe sogenannter Unit-Tests kann man dabei automatisiert überprüfen ob der zu testende Softwareteil noch immer die Ergebnisse liefert, die erwartet werden. Meist ist es so, dass man in größeren Softwareprojekten etwas ändert und damit implizit an anderen Stellen Fehler einbaut, welche ohne Unit-Tests gar nicht bzw. erst später auffallen.

Für die Entwicklung unter .NET/Mono mit Hilfe des Visual Studios habe ich mich dabei für NUnit entschieden, da man dieses im Gegensatz zu MsTest auch unter Linux und Mac OS X nutzen kann. Damit sich das ganze bequem in das Visual Studio integriert nutze ich TestDriven.NET welches unter http://www.testdriven.net/ bezogen werden kann. Der persönliche Gebrauch ist dabei kostenlos.

Nach der Installation von TestDriven.NET kann man sein Visual Studio starten und mit der testbasierten Entwicklung beginnen. Dabei hat man zwei Möglichkeiten dies zu lösen. Die erste Möglichkeit ist es die Tests in ein extra Projekt zu verlagern so das diese nicht in der zu testenden Software vorkommen. Bei der zweiten Möglichkeit werden die Tests direkt im zu testenden Projekt geschrieben (z.B. in einen Namespace „Tests“).

Als Beispiel sei folgende Klasse gegeben:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Project
{
	public class FooBar
	{
		public int A { get; private set; }
		public int B { get; private set; }
		public int C { get; private set; }

		public FooBar(int a, int b, int c)
		{
			A=a;
			B=b;
			C=c;
		}
	}
}

Die Klasse „FooBar“ nimmt dabei im Konstruktor die drei Variablen a, b und c entgegen und weist sie den jeweiligen Eigenschaften der Klasse zu. Um nun zu testen ob diese Zuweisung funktioniert schreiben wir eine entsprechende Test-Unit. Dazu erstellen wir eine Klasse namens: „FooBarTest.cs“:

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

namespace Project
{
	[TestFixture]
	public class FooBarTests
	{
		[Test]
		public void TestNewFooBar()
		{
			FooBar fooBar=new FooBar(13, 24, 47);

			Assert.AreEqual(13, fooBar.A);
			Assert.AreEqual(24, fooBar.B);
			Assert.AreEqual(47, fooBar.C);
		}
	}
}

Diese Testklasse testet nun ob die Werte die im Konstruktor angegeben werden auch wirklich in den entsprechenden Eigenschaften landen. Dazu wird zuerst das NUnit Framework mittels:

using NUnit.Framework;

eingebunden. Mittels des Attributes „[TestFixture]“ sagen wir dem NUnit Framework das sich in dieser Klasse Unit-Tests befinden. Bei diesem Attribut gibt es einige Einschränkungen, so darf die Klasse z.B. nicht abstrakt sein, näheres dazu erfährt man auch in der Dokumentation.

Das Attribut „[Test]“ über der Funktion „TestNewFooBar“ teilt dem Framework mit das es sich bei dieser Funktion um einen Unit-Test handelt, welcher überprüft werden soll. Dazu legen wir in der Funktion eine Instanz von „FooBar“ an und übergeben die entsprechenden Werte an den Konstruktor.

Mittels der „Assert.AreEqual“ Funktion (weitere „Assert“ Funktionen findet man in der Dokumentation) überprüfen wir ob die Werte auch bei den Eigenschaften A, B und C angekommen sind. Wäre dies nicht der Fall so würde der Tests fehlschlagen.

Nachdem ein Test für die entsprechende Klasse geschrieben wurde, klickt man im Visual Studio mit der rechten Maustaste auf die Testklasse und wählt dort „Run Test(s)“ aus. Möchte man mehrere Tests laufen lassen so muss einen übergeordneten Ordner auswählen. Wenn alles richtig gemacht wurde, sollte man folgende Ausgabe sehen:

------ Test started: Assembly: Project.exe ------

1 passed, 0 failed, 0 skipped, took 3,07 seconds (NUnit 2.6.0).

Falls ein Fehler aufgetreten ist so sieht das ganze so aus:

------ Test started: Assembly: Project.exe ------

Test 'Project.FooBarTests.TestNewFooBar' failed: 
  Expected: 47
  But was:  0
	FooBarTests.cs(19,0): bei Project.FooBarTests.TestNewFooBar()

0 passed, 1 failed, 0 skipped, took 1,66 seconds (NUnit 2.6.0).

Findet man einen Fehler bei einem Test sollte man schauen wodurch dieser verursacht wird und ihn beheben. Wenn man nun bei der späteren Entwicklung Fehler findet (und beseitigt), welche durch keinen Tests abgedeckt sind, so sollte man gleich einen entsprechenden Test dafür schreiben, damit dieser Fehler nicht ein weiteres Mal auftreten kann.

Weitere Informationen gibt es unter:
http://de.wikipedia.org/wiki/NUnit
http://de.wikipedia.org/wiki/XUnit

Techotopia

Auf der Suche nach einer Erklärung bestimmter iOS EIgenarten bin ich über die Techotopia unter http://www.techotopia.com gestolpert. Die Seite versteht sich dabei als freie Bibliothek von IT Büchern welche eine große Spanne an Themen abdeckt.

Mit dabei sind Bücher zu Themen wie iOS Entwicklung, Ubuntu und CentOS, Windows, C#, Ruby und vieles mehr. Die Bücher sind dabei komplett verfügbar, können aber auf Wunsch auch als eBook gekauft werden. Alles in allem findet man auf der Seite mehr als dreißig englischsprachige Bücher, so das sich ein gelegentlicher Besuch ab und an lohnt ;)

Antimaterie

Man nehme Illuminati (das Buch) und lese das dort ein viertel Gramm Antimaterie entwendet wurde und damit der ganze Vatikan in die Luft gesprengt werden soll. Wem das auch spanisch vorkommt, der sollte sich den Antimaterie-Rechner von Edward Muller unter http://www.edwardmuller.com/right17.htm anschauen.

Dort kann man dann ausrechnen, wie viel Megatonnen TNT-Äquivalent der entsprechenden Menge Antimaterie entspricht, wobei sich natürlich die Frage stellt ob man daraus eine Bombe bauen kann, da die Antimaterie in Kombination mit Materie einfach zerstrahlt bzw. einen gleißenden Lichtbitz ergibt. Und selbst wenn man eine Bombe daraus bauen könnte, so würde man damit nur ein paar Gebäude (je nach Größe) dem Erdboden gleich machen. Der Rest vom Vatikan würde also verschont bleiben ;)

Wie viel verdienen Journalisten?

Von bestimmten Berufsgruppen hat man eine Vorstellung wie viel sie in etwa verdienen. Mich persönlich interessierte wie viel Journalisten verdienen, da meine konkreten Vorstellungen da gegen Null gingen.

Wenn man im Web nach Textauftragsarbeiten sucht, so kommen dort Angebote für 1,8 bis 3 Cent, die jeder normale Journalist als Lohndummping empfindet. Manche Journalisten lassen ab 6 Cent pro Wort mit sich reden, wenn es sich dabei um Texte mit keinem bzw. wenig Rechercheaufwand handelt.

Blöderweise gibt es aber genug Leute die Aufträge für solche Preise annehmen. Wer sich mal anschauen möchte wie dies bei größeren Diensten bezahlt wird, der sollte sich die Seite http://www.textbroker.de/de/autoren-verguetung.php anschauen. Dort sind die Preise teilweise noch niedriger.

Zum Vergleich, bei Zeitungen sind es 12,5 Cent pro Zeile und aufwärts (das kann je nach Zeitung auch bis zu einem Euro pro Zeile betragen. Beim Nordkurier bewegen sich die Preise im übrigen zwischen 10 Cent (Nordkurier, Strelitzer Zeitung) bis 50 Cent pro Zeile. Bilder werden mit 18 Euro vergütet. Andere Journalisten lassen sich auch per Tageshonorar vergüten und kommen dann (wenn etwas zu tun ist) auf 150 € pro Tag.