<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>nettigkeiten</title>
	<atom:link href="http://nettigkeiten.ch/feed/" rel="self" type="application/rss+xml" />
	<link>http://nettigkeiten.ch</link>
	<description></description>
	<lastBuildDate>Sat, 07 Aug 2010 12:29:47 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='nettigkeiten.ch' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/1a54a61f3444ef522e12f6d87f16dcc5?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>nettigkeiten</title>
		<link>http://nettigkeiten.ch</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://nettigkeiten.ch/osd.xml" title="nettigkeiten" />
	<atom:link rel='hub' href='http://nettigkeiten.ch/?pushpress=hub'/>
		<item>
		<title>Silverlight: TextTrimming</title>
		<link>http://nettigkeiten.ch/2010/08/06/silverlight-texttrimming/</link>
		<comments>http://nettigkeiten.ch/2010/08/06/silverlight-texttrimming/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 17:52:47 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">https://nettigkeiten.wordpress.com/2010/08/06/silverlight-texttrimming/</guid>
		<description><![CDATA[Ein wirklich cooles neues Feature von Silverlight 4 ist TextTrimming. Ein Bild sagt da mehr wie 1000 Worte: TextTrimming zeigt bei einem Überlauf eines Textes automatisch 3 Punkte an – im Gegensatz zum Beispiel ohne TextTrimming, wo das ganze einfach abgeschnitten wird. Die Umsetzung könnte einfacher nicht sein: &#60;TextBlock Text=&#34;Ich bin ein langer Text&#34; TextTrimming=&#34;WordEllipsis&#34; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=168&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Ein wirklich cooles neues Feature von Silverlight 4 ist TextTrimming. Ein Bild sagt da mehr wie 1000 Worte:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/08/sshot1.png"><img style="display:inline;border-width:0;" class="wlDisabledImage" title="sshot-1" border="0" alt="sshot-1" src="http://nettigkeiten.files.wordpress.com/2010/08/sshot1_thumb.png?w=170&#038;h=106" width="170" height="106" /></a></p>
<p>TextTrimming zeigt bei einem Überlauf eines Textes automatisch 3 Punkte an – im Gegensatz zum Beispiel ohne TextTrimming, wo das ganze einfach abgeschnitten wird.</p>
<p>Die Umsetzung könnte einfacher nicht sein:</p>
<pre class="brush: xml;">&lt;TextBlock Text=&quot;Ich bin ein langer Text&quot; TextTrimming=&quot;WordEllipsis&quot; Width=&quot;116&quot; /&gt;</pre>
<p>Mehr Verfeinerungsmöglichkeiten gibt es zwar – wie etwa bei WPF – nicht, aber immerhin.</p>
<br /> Tagged: <a href='http://nettigkeiten.ch/tag/silverlight/'>silverlight</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/168/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/168/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/168/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=168&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2010/08/06/silverlight-texttrimming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/08/sshot1_thumb.png" medium="image">
			<media:title type="html">sshot-1</media:title>
		</media:content>
	</item>
		<item>
		<title>Entity Framework 4 / POCO und RIA Services</title>
		<link>http://nettigkeiten.ch/2010/08/03/entity-framework-4-poco-und-ria-services/</link>
		<comments>http://nettigkeiten.ch/2010/08/03/entity-framework-4-poco-und-ria-services/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 22:28:44 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Entity Framework]]></category>
		<category><![CDATA[POCO]]></category>
		<category><![CDATA[RIA Services]]></category>

		<guid isPermaLink="false">https://nettigkeiten.wordpress.com/2010/08/03/entity-framework-4-poco-und-ria-services/</guid>
		<description><![CDATA[RIA Services und Entity Framework 4 arbeiten ja eigentlich mühelos miteinander. Benutzt man aber POCO-Klassen im Entity Framework, geht dann plötzlich gar nichts mehr. Da meckert also der Compiler “Cannot resolve ‘EntityState’”. EntityState ist ein Property, welches in der Klasse EntityObject definiert ist – welche in Nicht-Poco-Szenarien die Basisklasse aller Entities ist. Da die POCO’s [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=158&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>RIA Services und Entity Framework 4 arbeiten ja eigentlich mühelos miteinander. Benutzt man aber POCO-Klassen im Entity Framework, geht dann plötzlich gar nichts mehr.</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/08/image.png"><img style="display:inline;border-width:0;" class="wlDisabledImage" title="image" border="0" alt="image" src="http://nettigkeiten.files.wordpress.com/2010/08/image_thumb.png?w=450&#038;h=128" width="450" height="128" /></a></p>
<p>Da meckert also der Compiler “Cannot resolve ‘EntityState’”. EntityState ist ein Property, welches in der Klasse EntityObject definiert ist – welche in Nicht-Poco-Szenarien die Basisklasse aller Entities ist. Da die POCO’s natürlich nicht von dieser Klasse ableiten (und dies auch nicht tun sollen), ist hier eine Alternative gefragt.</p>
<p>Die ObjectContext-Instanz bietet Zugriff auf den ObjectStateManager. Mit dessen Methode “TryGetObjectStateEntry” kann man den EntityState jeder Entität herausfinden. Eine entsprechende Hilfsmethode könnte so aussehen:</p>
<pre class="brush: csharp;">private EntityState GetEntityState(object entity)
{
    ObjectStateEntry stateEntry;
    if (ObjectContext.ObjectStateManager.TryGetObjectStateEntry(entity, out stateEntry))
    {
        return stateEntry.State;
    }
    return EntityState.Detached;
}</pre>
<p>Noch einfacher wirds, wenn die Entitäten eine gemeinsame Basis teilen (hier BaseEntity). Mit etwas ExtensionMethod-Magic lassen sich die notwendigen Anpassungen an der generierten Service-Klasse dann auch mit “Find and Replace” lösen:</p>
<pre class="brush: csharp;">private EntityState GetEntitySate(this EntityBase entity, ObjectStateManager stateManager)
{
    ObjectStateEntry stateEntry;
    if (stateManager.TryGetObjectStateEntry(entity, out stateEntry))
    {
        return stateEntry.State;
    }
    return EntityState.Detached;
}</pre>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/08/image1.png"><img style="display:inline;border-width:0;" class="wlDisabledImage" title="image" border="0" alt="image" src="http://nettigkeiten.files.wordpress.com/2010/08/image_thumb1.png?w=350&#038;h=248" width="350" height="248" /></a></p>
<p>Eigentlich etwas armselig, dass sowas überhaupt nötig ist – aber zumindest eine einigermassen komfortable Lösung.</p>
<br /> Tagged: <a href='http://nettigkeiten.ch/tag/entity-framework/'>Entity Framework</a>, <a href='http://nettigkeiten.ch/tag/poco/'>POCO</a>, <a href='http://nettigkeiten.ch/tag/ria-services/'>RIA Services</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=158&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2010/08/03/entity-framework-4-poco-und-ria-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/08/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/08/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Data Generation Plan</title>
		<link>http://nettigkeiten.ch/2010/05/04/data-generation-plan/</link>
		<comments>http://nettigkeiten.ch/2010/05/04/data-generation-plan/#comments</comments>
		<pubDate>Tue, 04 May 2010 21:27:45 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[VS2010]]></category>

		<guid isPermaLink="false">https://nettigkeiten.wordpress.com/2010/05/04/data-generation-plan/</guid>
		<description><![CDATA[Mit VS 2010 hat die unsägliche Abtrennung der Data-Edition von Visual Studio ein Ende. So dürfen sich jetzt auch “normale” Devs an den Data-Tools erfreuen. Ein praktisches Feature sind die Data Generation Plans. Mit Hilfe dieser lassen sich relativ einfach grosse Anzahl von Testdaten generieren. Um einen Data Generation Plan zu machen, muss man ein [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=151&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Mit VS 2010 hat die unsägliche Abtrennung der Data-Edition von Visual Studio ein Ende. So dürfen sich jetzt auch “normale” Devs an den Data-Tools erfreuen. Ein praktisches Feature sind die Data Generation Plans. Mit Hilfe dieser lassen sich relativ einfach grosse Anzahl von Testdaten generieren.</p>
<p>Um einen Data Generation Plan zu machen, muss man ein Datenbank-Projekt erstellen.</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/05/createproject.png"><img style="display:inline;border-width:0;" title="createproject" border="0" alt="createproject" src="http://nettigkeiten.files.wordpress.com/2010/05/createproject_thumb.png?w=400&#038;h=258" width="400" height="258" /></a> </p>
<p>Dann importiert man die Schema-Informationen.</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/05/importdb.png"><img style="display:inline;border-width:0;" title="importdb" border="0" alt="importdb" src="http://nettigkeiten.files.wordpress.com/2010/05/importdb_thumb.png?w=400&#038;h=180" width="400" height="180" /></a> </p>
<p>Danach kann man dem Projekt einen neuen Data Generation Plan anfügen.</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/05/addgenplan.png"><img style="display:inline;" title="addgenplan" alt="addgenplan" src="http://nettigkeiten.files.wordpress.com/2010/05/addgenplan_thumb.png?w=400&#038;h=260" width="400" height="260" /></a></p>
<p>In dem Generation Plan können dann pro Feld einige Einstellungen zu den Generierungsdaten gemacht werden – und vor allem kann auch die Anzahl der zu generierenden Datensätze definiert werden. </p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/05/genplan.png"><img style="display:inline;border-width:0;" title="genplan" border="0" alt="genplan" src="http://nettigkeiten.files.wordpress.com/2010/05/genplan_thumb.png?w=400&#038;h=242" width="400" height="242" /></a> </p>
<p>Dann nur noch den Plan starten – und schon ist die Tabelle voll von Daten</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/05/start.png"><img style="display:inline;border-width:0;" title="start" border="0" alt="start" src="http://nettigkeiten.files.wordpress.com/2010/05/start_thumb.png?w=400&#038;h=78" width="400" height="78" /></a></p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/05/results.png"><img style="display:inline;border-width:0;" title="results" border="0" alt="results" src="http://nettigkeiten.files.wordpress.com/2010/05/results_thumb.png?w=400&#038;h=200" width="400" height="200" /></a>&#160; </p>
<p>&#160;</p>
<p>So mächtig wie der <a href="http://www.red-gate.com/products/SQL_Data_Generator/index.htm">Data Generator</a> von Red Gate ist das zwar bei weitem nicht, aber so für eine einfache Testdaten-Generierung reicht das allemal.</p>
<br /> Tagged: <a href='http://nettigkeiten.ch/tag/sql/'>SQL</a>, <a href='http://nettigkeiten.ch/tag/vs2010/'>VS2010</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=151&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2010/05/04/data-generation-plan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/05/createproject_thumb.png" medium="image">
			<media:title type="html">createproject</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/05/importdb_thumb.png" medium="image">
			<media:title type="html">importdb</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/05/addgenplan_thumb.png" medium="image">
			<media:title type="html">addgenplan</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/05/genplan_thumb.png" medium="image">
			<media:title type="html">genplan</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/05/start_thumb.png" medium="image">
			<media:title type="html">start</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/05/results_thumb.png" medium="image">
			<media:title type="html">results</media:title>
		</media:content>
	</item>
		<item>
		<title>TechDays 2010 &#8211; ein Fazit</title>
		<link>http://nettigkeiten.ch/2010/04/09/techdays-2010-ein-fazit/</link>
		<comments>http://nettigkeiten.ch/2010/04/09/techdays-2010-ein-fazit/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 16:02:32 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[TechDays]]></category>

		<guid isPermaLink="false">http://nettigkeiten.wordpress.com/2010/04/09/techdays-2010-ein-fazit/</guid>
		<description><![CDATA[Ne, das war nix! Nachdem ich jetzt eine Weile keine TechDays mehr besucht habe, dachte ich mir, ich wage es dieses Jahr wiedermal. Wenns nix wird, werde ich wenigstens mit bei MS-Veranstaltungen üblich gutem Essen verwöhnt – dachte ich mir, aber von vorne. Die TechDays fanden dieses Jahr im Congress Center in Basel statt. Die [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=138&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Ne, das war nix! Nachdem ich jetzt eine Weile keine TechDays mehr besucht habe, dachte ich mir, ich wage es dieses Jahr wiedermal. Wenns nix wird, werde ich wenigstens mit bei MS-Veranstaltungen üblich gutem Essen verwöhnt – dachte ich mir, aber von vorne.</p>
<p>Die TechDays fanden dieses Jahr im Congress Center in Basel statt. Die Location war soweit in Ordnung, ausser das in div. Sessions die Internetverbindung unbrauchbar instabil war – wer auch immer dafuer grade stehen muss, kriegt hoffentlich einen Rüffel. Wenigstens auf die Swisscom Hotspots war verlass, so konnte auf diese ausgewichen werden.</p>
<p>Aber das wichtigste sind wohl die Sessions, und diese enttäuschten (mit wenigen Ausnahmen) durchs Band. </p>
<p>Schon die KeyNote liess nichts gutes erahnen: nachdem man die zwei, milde gesagt, unkomischen Komiker ertragen hatte, gabs einen Vortrag über das eigentlich sehr verheissungsvolle Thema Film-Effekte. Leider war das ganze viel zu wenig konkret und technisch, so dass es mehr oder weniger darauf hinauslief, dass man Szenen aus Hellboy II (ohne Ton) geniessen konnte. Da wäre mehr drin gelegen.</p>
<p>Die eigentlichen Sessions fingen dann sehr gut an. Ronnie Saurenmann gab bei seiner Silverlight 4 Introduction alles! Das war komischer als die beiden angestellten Komiker und informativ zugleich. Bis auf die Advanced Silverlight-Session (wieder von Ronnie Saurenmann) konnte man den ersten Tag aber getrost vergessen. Tiefpunkt war der zweiteilige Vortrag “Sharepoint fuer Entwickler” von Olaf Feldkamp. Da war einfach viel zu wenig Fleisch am Knochen und das ganze war trotz des Titels eher auf ein Management-Publikum ausgerichtet.</p>
<p>Am zweiten Tag kann ich nur die Session von Michael Hofer zu den Sandboxed Solutions positiv herausheben. Der Inhalt war dem Publikum entsprechend technisch und hatte auch etwas Tiefe. Vorgetragen war das ganze locker und angenehm. Schade nur das Michael den Lumpensammler-Slot ganz am Schluss erhalten hat. </p>
<p>Ansonsten hätte ich auch den zweiten Tag besser an der Sonne verbracht.</p>
<p>Als Tüpfelchen auf dem i stellte sich dann das “Abschlussgeschenk” von Microsoft heraus. Beim rauslaufen erhielt jeder Teilnehmer eine gefuellte Strandtasche – gefuellt mit Werbung &#8211; komplett für die Tonne. Das alles in Kombination ist fast schon eine Frechheit für eine Veranstaltung die fast CHF 520 kostet. Da habe ich an kostenlosen (Partner-) Events von Microsoft schon viel besseres erlebt.</p>
<p>Ach ja – damit sich der Kreis wieder schliesst. Nein auch das Essen holte das ganze nicht raus. Es war zwar einigermassen ok, aber mehr auch nicht.</p>
<p>Ich hoffe MS geht hier für naechstes Jahr nochmals&#160; ueber die Bücher – sonst waren das meine letzten TechDays. Gefordert sind mehr Tiefe, mehr Technik, weniger Marketing – und gutes Essen <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Und bitte lasst das mit den Drittliga-Komikern, das braucht niemand.</p>
<br /> Tagged: <a href='http://nettigkeiten.ch/tag/events/'>Events</a>, <a href='http://nettigkeiten.ch/tag/techdays/'>TechDays</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=138&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2010/04/09/techdays-2010-ein-fazit/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>
	</item>
		<item>
		<title>Me, Myself and ReSharper #3: Color Identifiers</title>
		<link>http://nettigkeiten.ch/2010/04/05/me-myself-and-resharper-3-color-identifiers/</link>
		<comments>http://nettigkeiten.ch/2010/04/05/me-myself-and-resharper-3-color-identifiers/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 15:41:25 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://nettigkeiten.wordpress.com/2010/04/05/me-myself-and-resharper-3-color-identifiers/</guid>
		<description><![CDATA[Die Code Inspections von ReSharper bieten die Option “Color Identifiers” – quasi Schminke für den Code. Die Vorher-Nachher-Ansicht zeigt die Unterschiede: Die entsprechende Option kann in den ReSharper-Optionen aktiviert werden: Tagged: resharper, tools<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=137&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Die Code Inspections von ReSharper bieten die Option “Color Identifiers” – quasi Schminke für den Code. Die Vorher-Nachher-Ansicht zeigt die Unterschiede:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/04/beforeafter.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="Vorher-Nachher" border="0" alt="Vorher-Nachher" src="http://nettigkeiten.files.wordpress.com/2010/04/beforeafter_thumb.png?w=404&#038;h=132" width="404" height="132" /></a> </p>
<p>Die entsprechende Option kann in den ReSharper-Optionen aktiviert werden:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2010/04/options.png"><img style="border-bottom:0;border-left:0;display:inline;border-top:0;border-right:0;" title="ReSharper Optionen" border="0" alt="ReSharper Optionen" src="http://nettigkeiten.files.wordpress.com/2010/04/options_thumb.png?w=404&#038;h=147" width="404" height="147" /></a></p>
<br /> Tagged: <a href='http://nettigkeiten.ch/tag/resharper/'>resharper</a>, <a href='http://nettigkeiten.ch/tag/tools/'>tools</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/137/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/137/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/137/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=137&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2010/04/05/me-myself-and-resharper-3-color-identifiers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/04/beforeafter_thumb.png" medium="image">
			<media:title type="html">Vorher-Nachher</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2010/04/options_thumb.png" medium="image">
			<media:title type="html">ReSharper Optionen</media:title>
		</media:content>
	</item>
		<item>
		<title>git &#8211; leb wohl Subversion</title>
		<link>http://nettigkeiten.ch/2009/09/23/git-leb-wohl-subversion/</link>
		<comments>http://nettigkeiten.ch/2009/09/23/git-leb-wohl-subversion/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 21:36:10 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[21]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://blog.nettigkeiten.ch/archive/2009/09/23/226.aspx</guid>
		<description><![CDATA[Als ich vor einiger Zeit erstmals von git hörte, hat mich das ehrlich gesagt recht kalt gelassen. Subversion lieferte mir wunderbare Dienste, kein Grund für einen Umstieg. Daher habe ich mich auch gar nie etwas intensiver damit beschäftigt… Nachdem in meiner Twitter-Timeline der #git-Hashtag immer öfters auftauchte, schaute ich mir das doch  mal etwas genauer [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=76&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Als ich vor einiger Zeit erstmals von <a href="http://git-scm.com/">git</a> hörte, hat mich das ehrlich gesagt recht kalt gelassen. Subversion lieferte mir wunderbare Dienste, kein Grund für einen Umstieg. Daher habe ich mich auch gar nie etwas intensiver damit beschäftigt…</p>
<p>Nachdem in meiner Twitter-Timeline der #git-Hashtag immer öfters auftauchte, schaute ich mir das doch  mal etwas genauer an. Ein paar Tage später, laufen sind nun alle meine SVN-Repositories nach git migriert…</p>
<h2>Was ist git?</h2>
<p>git gehört zu den Distributed Version Control Systemen. Verteilt heisst hier, dass es nicht ein zentrales Repository gibt, sondern eben verschiedene, verteilte. Holt man sich bei Subversion eine lokale Arbeitskopie eines Repositories, hält man sich bei git das komplette Repository lokal. Ein lokales Repository bietet diverse Vorteile:</p>
<ul>
<li>Offline Commits: Da ich lokal nicht nur eine Arbeitskopie habe, sondern aber ein komplettes Repository samt History, kann ich auch lokal (bzw. offline) committen. Auch für Diffs etc. ist kein Online-Zugriff notwendig.</li>
<li>lokale Branches: Auch Branches können dementsprechend lokal erstellt werden, ohne dass die Co-Devs jemals etwas davon erfahren müssen <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li>Geschwindigkeit: Files adden, committen – es flutscht gewaltig <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Speicherplatz: Durch die Art wie git intern arbeitet, braucht es massiv weniger Speicherplatz wie Subversion (massiv kann durchaus Faktor 2-3 heissen).</li>
</ul>
<p>Jeder Entwickler hält sich also lokal ein Repository. Natürlich muss es dann trotzdem irgendwo ein “Master”-Repository geben, wohin dann die Änderungen dann mal gepusht werden. Dies alles bedarf natürlich möglichst effizienten und einfachen Branching und Merging-Mechanismen – da hab ich noch nicht allzuviel probiert, aber was ich bis jetzt gesehen habe reicht, um Subversion in Rente zu schicken!</p>
<p>Bald folgt mehr <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br /> Tagged: git, svn <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/76/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/76/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/76/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=76&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2009/09/23/git-leb-wohl-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>
	</item>
		<item>
		<title>Me, Myself and ReSharper #2: Live Templates</title>
		<link>http://nettigkeiten.ch/2009/03/25/me_myself_and_resharper_2_live_templates/</link>
		<comments>http://nettigkeiten.ch/2009/03/25/me_myself_and_resharper_2_live_templates/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 19:41:40 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[21]]></category>
		<category><![CDATA[resharper]]></category>

		<guid isPermaLink="false">http://blog.nettigkeiten.ch/archive/2009/03/25/me_myself_and_resharper_2_live_templates.aspx</guid>
		<description><![CDATA[Das Konzept der Live Templates ist dem der Visual Studio Code Snippets ähnlich. Live Templates ermöglichen es also, beliebige Code-Fragmente als Template zu hinterlegen, so dass diese einfach und schnell im Code wiederverwendet werden können. Der Resharper bringt hier schon einige von Haus aus mit: Da gibt es solche darunter, die einem einfach etwas Tipparbeit [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=75&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Das Konzept der Live Templates ist dem der Visual Studio Code Snippets ähnlich. Live Templates ermöglichen es also, beliebige Code-Fragmente als Template zu hinterlegen, so dass diese einfach und schnell im Code wiederverwendet werden können.</p>
<p>Der Resharper bringt hier schon einige von Haus aus mit:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2009/03/image_2.png"><img class="alignnone size-thumbnail wp-image-92" title="Resharper Predefined Livetemplates" src="http://nettigkeiten.files.wordpress.com/2009/03/image_2.png?w=126&#038;h=150" alt="Resharper Predefined Livetemplates" width="126" height="150" /></a></p>
<p>Da gibt es solche darunter, die einem einfach etwas Tipparbeit sparen (aus “thr” resultiert “throw new “) und andere, die etwas aufwändigere Konstruktur kreieren, so entsteht aus “itdic” eine Iteration über ein Dictionary:<br />
<a href="http://nettigkeiten.files.wordpress.com/2009/03/image_6.png"><img class="alignnone size-medium wp-image-93" title="Livetemplate itdic" src="http://nettigkeiten.files.wordpress.com/2009/03/image_6.png?w=300&#038;h=103" alt="Livetemplate itdic" width="300" height="103" /></a></p>
<p>Dabei sind die grün bzw. blau hinterlegten Bezeichnungen Platzhalter, welche mit TAB durchsprungen werden können – so hat man das eingefügt Snippet innert kürze für die jeweilige Situation angepasst. Resharper probiert bei der Wahl der Platzhalter jeweils auch herauszufinden, was man tun möchte. So leitet er aus meiner vorgängigen Initialisierung des dic-Dictionaries automatisch ab, dass ich wahrscheinlich darüber iterieren möchte, und dass dieses Dictionary einen Key vom Typ Integer und den Wert als String enthält.</p>
<p>Wer sieht den Fehler? Genau, die Iterationsvariable ist vom Typ DictionaryEntry statt KeyValuePair und die Casts im Body sind überflüssig. Das heisst, dieses Live Template ist für die Verwendung mit “klassischen” Dictionaries gedacht, nicht aber für generische.</p>
<h3>Was nicht ist, kann ja noch werden</h3>
<p>Und hier wirds erst richtig spassig. Live-Templates können auch ganz einfach selbst erstellt werden. Hierfür gibt es einen einfachen Editor, wo man sich die Live-Templates erstellen kann. Unser angepasstes Skript von oben sieht nun folgendermassen aus:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2009/03/image_13.png"><img class="alignnone size-medium wp-image-94" title="Livetemplate erstellen" src="http://nettigkeiten.files.wordpress.com/2009/03/image_13.png?w=300&#038;h=169" alt="Livetemplate erstellen" width="300" height="169" /></a></p>
<p>Man definiert also das Template mit Platzhalter. Für diese wiederum kann man dann Makros definieren, welche dem Live Template eine gewisse Inteligenz mitgeben. So wird hier als Beispiel für den DICT-Platzhalter definiert, dass eine Variable vom Typ System.Collections.Generic.Dictionary vorgeschlagen werden soll. Dies veranlasst Resharper bei der Verwendung des Templates dann dazu, im Code nach einer entsprechenden Variable zu suchen.</p>
<p>Wenden wir nun das Template auf unseren Code von oben an:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2009/03/image_10.png"><img class="alignnone size-medium wp-image-95" title="Erstelltes Livetemplate wählen" src="http://nettigkeiten.files.wordpress.com/2009/03/image_10.png?w=300&#038;h=138" alt="Erstelltes Livetemplate wählen" width="300" height="138" /></a></p>
<p><a href="http://nettigkeiten.files.wordpress.com/2009/03/image_12.png"><img class="alignnone size-medium wp-image-97" title="Generierter Code des Livetemplates" src="http://nettigkeiten.files.wordpress.com/2009/03/image_12.png?w=300&#038;h=84" alt="Generierter Code des Livetemplates" width="300" height="84" /></a></p>
<p>Et voilà – nun passts perfekt. Die Typen werden korrekt erkannt und die Iterationsvariable hat jetzt auch den korrekten Datentyp. Nettes Gimmick dazu: Im eingeblendeten DropDown macht uns Resharper gleich noch Namensvorschläge die an dieser Stelle evtl. Sinn machen könnten.</p>
<br /> Tagged: resharper <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/75/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/75/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/75/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=75&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2009/03/25/me_myself_and_resharper_2_live_templates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/03/image_2.png?w=126" medium="image">
			<media:title type="html">Resharper Predefined Livetemplates</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/03/image_6.png?w=300" medium="image">
			<media:title type="html">Livetemplate itdic</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/03/image_13.png?w=300" medium="image">
			<media:title type="html">Livetemplate erstellen</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/03/image_10.png?w=300" medium="image">
			<media:title type="html">Erstelltes Livetemplate wählen</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/03/image_12.png?w=300" medium="image">
			<media:title type="html">Generierter Code des Livetemplates</media:title>
		</media:content>
	</item>
		<item>
		<title>Me, Myself and ReSharper #1: Goto Member</title>
		<link>http://nettigkeiten.ch/2009/01/21/me-myself-and-resharper-1-goto-member/</link>
		<comments>http://nettigkeiten.ch/2009/01/21/me-myself-and-resharper-1-goto-member/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 21:55:44 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[21]]></category>
		<category><![CDATA[resharper]]></category>

		<guid isPermaLink="false">http://blog.nettigkeiten.ch/archive/2009/01/21/me-myself-and-resharper-1-goto-member.aspx</guid>
		<description><![CDATA[Der ReSharper ist schon eine ganze Weile das erste Tool das mir nach der VS-Installation auf die Kiste kommt. Da ich immer wieder Fragen à la &#8222;Wozu braucht man den noch, VS kann ja auch Refactoring&#8220; höre, blogge ich nun in unregelmässigen Abständen über meine schönen Erlebnisse mit R# Mit ALT+&#60; erhalt liefert mir R# [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=74&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Der <a href="http://www.jetbrains.com/resharper/">ReSharper</a> ist schon eine ganze Weile das erste Tool das mir nach der VS-Installation auf die Kiste kommt. Da ich immer wieder Fragen à la &#8222;Wozu braucht man den noch, VS kann ja auch Refactoring&#8220; höre, blogge ich nun in unregelmässigen Abständen über meine schönen Erlebnisse mit R# <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Mit ALT+&lt; erhalt liefert mir R# eine Liste aller Members der gerade offenen Klasse:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2009/01/21-01_2.png"><img class="alignnone size-medium wp-image-99" title="Resharper Codenavigation" src="http://nettigkeiten.files.wordpress.com/2009/01/21-01_2.png?w=300&#038;h=136" alt="Resharper Codenavigation" width="300" height="136" /></a></p>
<p>Wie man sieht lässt sich die Liste auch durchsuchen</p>
<br /> Tagged: resharper <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=74&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2009/01/21/me-myself-and-resharper-1-goto-member/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/01/21-01_2.png?w=300" medium="image">
			<media:title type="html">Resharper Codenavigation</media:title>
		</media:content>
	</item>
		<item>
		<title>BDD &#8211; Expected Exceptions</title>
		<link>http://nettigkeiten.ch/2009/01/04/bdd-expected-exceptions/</link>
		<comments>http://nettigkeiten.ch/2009/01/04/bdd-expected-exceptions/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 00:06:54 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[24]]></category>
		<category><![CDATA[34]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://blog.nettigkeiten.ch/archive/2009/01/04/bdd---expected-exceptions.aspx</guid>
		<description><![CDATA[Wie testet man auf eine erwartete Exception im BDD-Style? Hier ein (etwas sinnfreies) Beispiel &#8211; auch hier das ganze wieder mit xUnit und den xUnitBddExtensions: 1: [Concern(typeof (Television))] 2: public class when_Television_gets_turnOff_command_if_it_is_turned_off : InstanceContextSpecification 3: { 4: private Action theTurnOffAction; 5: 6: protected override Television CreateSut() 7: { 8: return new Television(); 9: } 10: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=73&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Wie testet man auf eine erwartete Exception im BDD-Style?</p>
<p>Hier ein (etwas sinnfreies) Beispiel &#8211; auch hier das ganze wieder mit <a href="http://www.codeplex.com/xunit">xUnit</a> und den <a href="http://code.google.com/p/xunitbddextensions/">xUnitBddExtensions</a>:</p>
<div>
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> [Concern(<span style="color:#0000ff;">typeof</span> (Television))]</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> when_Television_gets_turnOff_command_if_it_is_turned_off : InstanceContextSpecification</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span> {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>     <span style="color:#0000ff;">private</span> Action theTurnOffAction;</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>     <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">override</span> Television CreateSut()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span>         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> Television();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  11:</span>     <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">void</span> Because()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  12:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  13:</span>         theTurnOffAction = The.Action(() =&gt; Sut.TurnOff());</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  14:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  15:</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  16:</span>     [Observation]</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  17:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Should_throw_an_NotYetTurnedOnException()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  18:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  19:</span>         theTurnOffAction.ShouldThrowAn();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  20:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  21:</span> }</pre>
</div>
</div>
<p>In Zeile 13</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">theTurnOffAction = The.Action(() =&gt; Sut.TurnOff());</pre>
</div>
</div>
<p>wird ein Action-Delegate gespeichert, welches dann auf Zeile 19 im Hintergrund aufgerufen wird.</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;">theTurnOffAction.ShouldThrowAn();</pre>
</div>
</div>
<p>Ein weiteres Beispiel für schön lesbare und somit aussagekräftige Tests.</p>
<br /> Tagged: bdd, tdd <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/73/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/73/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/73/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=73&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2009/01/04/bdd-expected-exceptions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>
	</item>
		<item>
		<title>BDD &#8211; bin ich schon drin oder was?</title>
		<link>http://nettigkeiten.ch/2009/01/03/bdd-bin-ich-schon-drin-oder-was/</link>
		<comments>http://nettigkeiten.ch/2009/01/03/bdd-bin-ich-schon-drin-oder-was/#comments</comments>
		<pubDate>Sat, 03 Jan 2009 22:38:59 +0000</pubDate>
		<dc:creator>nettigkeiten</dc:creator>
				<category><![CDATA[24]]></category>
		<category><![CDATA[34]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://blog.nettigkeiten.ch/archive/2009/01/03/bdd---bin-ich-schon-drin-oder-was.aspx</guid>
		<description><![CDATA[Ich lese schon eine Weile bei Alt.Net (DE) mit. In letzter Zeit war da immer mal wieder das Thema von BDD (Behaviour Driven Design) als Evolution zu TDD (Test Driven Design). Nachdem ich einige Zeilen darüber gelesen habe, war mir klar, dass das eine genauere Betrachtung verdient hat. Nachfolgender Artikel (und folgende) sollten nicht als [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=72&subd=nettigkeiten&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Ich lese schon eine Weile bei <a href="http://altdotnet.de">Alt.Net (DE)</a> mit. In letzter Zeit war da immer mal wieder das Thema von BDD (Behaviour Driven Design) als Evolution zu TDD (Test Driven Design). Nachdem ich einige Zeilen darüber gelesen habe, war mir klar, dass das eine genauere Betrachtung verdient hat.</p>
<p>Nachfolgender Artikel (und folgende) sollten nicht als Experten-Essay verstanden werden &#8211; vielmehr soll es Einsteigern helfen, die die gleichen Fehlüberlegungen machen und sich in die gleichen Sackgassen verrennen wie ich. Natürlich wär&#8217;s auch schön, wenn ich von dem einen oder anderen Experten einen Schubs in die richtige Richtung erhalten würde. <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Aber worum gehts denn nun überhaupt:</p>
<h3>TDD, BDD&#8230; WTF?</h3>
<p>Wie bereits gesagt, ist BDD als Evolution und nicht etwa als Alternative zu TDD zu verstehen. Kurz gesagt: TDD stellt den Test in den Mittelpunkt, BDD das Verhalten (Behaviour). Auf den ersten Blick erscheinen BDD-Tests recht speziell. Die Klassen- und Test-Namen sind in sprechender Form gehalten. Das ist dann auch gleich einer der Hauptpunkte von BDD: die Sprache. BDD-Tests sollen in einer Sprache definiert sein, die auch ein Fach-Vertreter lesen und verstehen kann.</p>
<h3>Hands On</h3>
<p>Hier mal ein Beispiel: eine Klasse &#8222;Television&#8220; soll getestet werden. Es wird das Verhalten getestet, wenn der Fernseher eingeschaltet wird.</p>
<p>Für das Beispiel wurde <a href="http://www.codeplex.com/xunit">xUnit</a> mit den <a href="http://code.google.com/p/xunitbddextensions/">xUnitBddExtensions</a> von Björn Rochel verwendet. Diese beiden Frameworks erlauben es, den BDD-Gedanken bestmöglichst in Code umzusetzen.</p>
<div style="border:1px solid gray;overflow:auto;font-size:8pt;width:97.5%;cursor:text;max-height:200px;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;margin:20px 0 10px;padding:4px;">
<div style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;padding:0;">
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   1:</span> [Concern(<span style="color:#0000ff;">typeof</span> (Television))]</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   2:</span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> when_Television_turns_on : InstanceContextSpecification</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   3:</span> {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   4:</span>     <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">override</span> Television CreateSut()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   5:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   6:</span>         <span style="color:#0000ff;">return</span> <span style="color:#0000ff;">new</span> Television();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   7:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   8:</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">   9:</span>     <span style="color:#0000ff;">protected</span> <span style="color:#0000ff;">override</span> <span style="color:#0000ff;">void</span> Because()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  10:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  11:</span>         Sut.TurnOn();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  12:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  13:</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  14:</span>     [Observation]</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  15:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Should_start_on_channel_one()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  16:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  17:</span>         Sut.GetCurrentChannel().ShouldBeEqualTo(1);</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  18:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  19:</span></pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  20:</span>     [Observation]</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  21:</span>     <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> Should_allow_to_turn_off()</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  22:</span>     {</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  23:</span>         Sut.TurnOff().ShouldBeTrue();</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:#f4f4f4;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  24:</span>     }</pre>
<pre style="overflow:visible;font-size:8pt;width:100%;color:black;line-height:12pt;font-family:consolas,'Courier New',courier,monospace;background-color:white;border-style:none;margin:0;padding:0;"><span style="color:#606060;">  25:</span> }</pre>
</div>
</div>
<p>Die Basisklasse InstanceContextSpecification wird vom xUnitBddExtensions-Framework bereitgestellt.</p>
<p>In CreateSut (Sut = System under test), wird also die zu testende Instanz erstellt. Because stellt dann also den eigentlichen Grund des Testens dar, in diesem Falle also die TurnOn-Methode. Danach folgen zwei Observations, die eigentlichen Tests.</p>
<p>Wenn man sich nun die Resultate in einem Testrunner anschaut, sieht man auch, wie sprechend das ganze jetzt daher kommt:</p>
<p><a href="http://nettigkeiten.files.wordpress.com/2009/01/03-01_4.png"><img class="alignnone size-medium wp-image-101" title="Testrunner Resultate" src="http://nettigkeiten.files.wordpress.com/2009/01/03-01_4.png?w=300&#038;h=58" alt="Testrunner Resultate" width="300" height="58" /></a></p>
<p>So ein Bericht kann man gut auch jemandem von Fach vorlegen, ohne dass dieser die Stirn runzelt &#8211; ok, wenn noch alles rot ist so wie hier, vielleicht schon <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Was man auch schön sieht ist, dass sich dieser Bericht wie das Inhaltsverzeichnis einer Spezifikation liest. Die Tests sind also viel näher bei den Anforderungen &#8211; auch sprachlich. Mein Eindruck war auch, dass sich Tests so einfacher identifizieren lassen.</p>
<h3>AAA</h3>
<p>Und gleich nochmal so ein <a href="http://en.wikipedia.org/wiki/Three-letter_acronym">TLA</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  AAA steht für &#8222;Arrange Act Assert&#8220; und stellt ein Syntax-Pattern dar. In unserem Beispiel wurde der Test in genau drei solche Teile zerlegt:</p>
<ol>
<li>CreateSut (= Arrange)</li>
<li>Because (= Act)</li>
<li>Should_x (= Assert)</li>
</ol>
<p>Der Vorteil dieser Syntax ist, dass die verschiedenen Bereiche des Tests sauber voeinander getrennt sind &#8211; so können die Observations auf das wirklich Wesentliche (nämlich das Testen der Verhalten) reduziert werden.</p>
<p>Ansatzweise ist das auch in den bekannten TestSetup-Verfahren von nUnit &amp; Co. umgesetzt &#8211; allerdings wird dort das Act und Assert meist vermischt. Die <a href="http://code.google.com/p/xunitbddextensions/">xUnitBddExtensions</a> erlauben hier eine schöne Trennung und saubere Syntax.</p>
<p>Das war ein erster kleiner Einblick in BDD, welcher hoffentlich zum Einstieg einlädt. Ich kann es nur empfehlen. Wer damit starten möchte, dem möchte ich nochmals die <a href="http://code.google.com/p/xunitbddextensions/">xUnitBddExtensions</a> wärmstens ans Herz legen. Die Sourcen umfassen neben dem Framework auch noch zwei Templates für Resharper, welche die Test-Erstellung erleichtert. Ausserdem wurden die Extensions selbst mit BDD-Tests getestet, das heisst man hat dort schon jede Menge guter Samples drin.</p>
<br /> Tagged: bdd, tdd <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/nettigkeiten.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/nettigkeiten.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/nettigkeiten.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/nettigkeiten.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/nettigkeiten.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/nettigkeiten.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/nettigkeiten.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/nettigkeiten.wordpress.com/72/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/nettigkeiten.wordpress.com/72/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/nettigkeiten.wordpress.com/72/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=nettigkeiten.ch&blog=10901122&post=72&subd=nettigkeiten&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://nettigkeiten.ch/2009/01/03/bdd-bin-ich-schon-drin-oder-was/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/e253ebd9a114502a908703d92548bab3?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">nettigkeiten</media:title>
		</media:content>

		<media:content url="http://nettigkeiten.files.wordpress.com/2009/01/03-01_4.png?w=300" medium="image">
			<media:title type="html">Testrunner Resultate</media:title>
		</media:content>
	</item>
	</channel>
</rss>