Decorate Your Tests

Standard

In my last post I showed you how to write a minimal NUnit addin. It didn’t do anything useful, so let’s see what we can do with test decorators.

What Is a Test Decorator?

The Decorator Pattern describes a design for attaching additional responsibilities to an object dynamically. It is also known as Wrapper. Test Decorators wrap a single test case or a test fixture and therefore allow you to run some code before and after it.

Typical uses for test decorators are measuring performance or setting up and cleaning up a database.

Copy a File Before Running a Test

Assume that a test needs a certain file each time you run a test. If those tests are in the same test fixture and there are no other tests in this fixture, you will use a setup method. Otherwise test decorators may help you. Furthermore test decorators provide a way to share test extensions.

So, let’s start by writing an NUnit addin:

    [NUnitAddin(Name="Copy File Decorator Addin",
                Description="Copies a file before running the test.")]
    public class CopyFileAddin : IAddin, ITestDecorator
    {
      public bool Install(IExtensionHost host)
      {
        IExtensionPoint decorators = host.GetExtensionPoint("TestDecorators");
        if (decorators == null)
          return false;
                
        decorators.Install(this);
        return true;
      }
    }

As CopyFileAddin implements both the IAddin and the ITestDecorator interfaces, it installs itself at the extension point “TestDecorators”. I described the IAddin interface in my last post and ITestDecorator declares the method Decorate and CopyFileAddin implements it as follows:

    public Test Decorate(Test test, MemberInfo member)
    {
      // Decorate only single test cases
      if (test is TestCase)
      {
        Attribute attribute = Reflect.GetAttribute(
            member, "CopyFileTest.Framework.CopyFileAttribute", false);
                    
        if (attribute != null)
        {
          string sourcePath = (string)Reflect.GetPropertyValue(attribute, 
              "SourcePath", BindingFlags.Public | BindingFlags.Instance);
          string destinationPath = (string)Reflect.GetPropertyValue(attribute, 
              "DestinationPath", BindingFlags.Public | BindingFlags.Instance);
                        
          test = new CopyFileTestCase((TestCase) test,
              sourcePath, destinationPath);
        }
      }
    
      return test;
    }

In NUnit 2.4 you mark tests to be wrapped by using specific .NET attributes. The test decorator extension identifies those tests and wrap them with a special decorator test case class, e.g. the following test case will be wrapped with a CopyFileTestCase if the CopyFileAddin is properly installed in your NUnit – in my last post I described how to do this.

The attribute CopyFile marks the test case to be wrapped and stores the source and destination path of the file to be copied. The test may be run in another thread, so the paths must be absolute.

The decorator class looks like this:

    public class CopyFileTestCase : TestCase
    {
      private TestCase _testCase;
      private string _sourceFilePath;
      private string _destinationPath;
            
      public CopyFileTestCase(
          TestCase testCase,
          string sourceFilePath,
          string destinationPath)
          : base((TestName)testCase.TestName.Clone())
      {
        _testCase = testCase;
        _sourceFilePath = sourceFilePath;
        _destinationPath = destinationPath;
      }
    
      public override void Run(TestCaseResult result)
      {
        if (File.Exists(_sourceFilePath))
          File.Copy (_sourceFilePath, _destinationPath);
            
        _testCase.Run(result);
                
        if (File.Exists(_destinationPath))
          File.Delete(_destinationPath);
      }
    }

Test Cases And Test Suites

Maybe you are wondering, what the classes Test and TestCase are about. NUnit organizes tests in test cases and test suites and both are tests. They form another design pattern known as Composite.

Test, TestCase and TestSuite

If your decorator supports single test cases only it will wrap a TestCase, like CopyFileTestCase. You may decorate test suites or both test cases and test suites by wrapping a TestSuite or Test object respectively.

RepeatedTestDecorator and MaxTimeDecorator

NUnit 2.4 already provides a test decorator: the RepeatedTestDecorator. You can find it in the assembly “nunit.framework.extensions.dll”.

    using System;
    using NUnit.Framework;
    using NUnit.Framework.Extensions;
    
    namespace RepeatedTest
    {
      [TestFixture]
      public class RepeatedTestFixture
      {
        private int _count;
            
        [TestFixtureSetUp]
        public void TestFixtureSetUp()
        {
          _count = 0;
        }
            
        [Test]
        [Repeat(5)]
        public void RepeatedTestCase()
        {
          _count++;
          Console.WriteLine(_count);
          if (_count == 5)
            Assert.Fail("The test has been repeated 5 times.");
        }
      }
    }

You will have to reference the assembly “nunit.framework.extensions.dll”. The test will fail with the
provided message. The NUnit package installs some sample projects and amongst them a solution with examples for the new Core Extensibility features. There you can find the sample decorator MaxTimeDecorator, which fails a test when its duration exceeds a provided limit.

Downsides

Currently there is no way to specify an Addin as requirement. Imagine, you’ve written a unit test using the MaxTimeDecorator. Your test will fail if it runs longer than the provided limit. You
commit your changes to your source repository. Your colleague gets the new unit test from the repository and works on the program. Her changes affect the performance of the code and the test lasts longer than required. If she didn’t install the MaxTimeDecorator Addin, she would not notice the defect.

There is currently no mechanism to control the order in which the decorators are applied. NUnit applies decorators in the order in which they are returned through reflection. Therefore pay attention to this issue if you use more than one decorator.

    [Test]
    [Repeat(5)]
    [MaxTime(1100)]
    public void RepeatedTestCase()
    {
      _count++;
      System.Threading.Thread.Sleep(1000);
      if (_count == 5)
        Assert.Fail("The test has been repeated 5 times.");
    }

In this example it is not predictable if the test will fail because of the counter or the exceeded time limit. If the RepeatDecorator wraps the MaxTimeDecorator, it will fail because of the counter, otherwise because of the time limit.

More Information

If you need more information about NUnit addins, have a look at the NUnit documentation.

234 thoughts on “Decorate Your Tests

  1. wh0cd12608 [url=http://buyavalide.doctor/]avalide[/url] [url=http://genericpropranolol.doctor/]propranolol[/url] [url=http://buytadalafil.doctor/]tadalafil[/url] [url=http://generictadalafil.doctor/]tadalafil 5mg[/url] [url=http://cheapprednisolone.doctor/]prednisolone[/url] [url=http://buydiclofenac.doctor/]diclofenac sodium 75 mg[/url] [url=http://cheapantabuse.doctor/]generic antabuse online[/url] [url=http://buymobic.doctor/]buy mobic[/url] [url=http://betnovate.doctor/]betnovate cream[/url] [url=http://sildenafilonline.doctor/]order sildenafil online[/url]

  2. wh0cd12608 [url=http://genericcolchicine.doctor/]colchicine brand name[/url] [url=http://cheapantabuse.doctor/]antabuse tablets[/url] [url=http://buyprednisolone.doctor/]prednisolone[/url] [url=http://genericdoxycycline.doctor/]generic doxycycline[/url] [url=http://buyallopurinol.doctor/]resources[/url] [url=http://buyamitriptyline.doctor/]elavil medicine[/url]

  3. wh0cd12608 [url=http://propecianopresription.doctor/]propecia[/url] [url=http://buyhydrochlorothiazide.doctor/]order hydrochlorothiazide[/url] [url=http://ordercialis.doctor/]order cialis[/url] [url=http://buytadalissx.doctor/]buy tadalis sx[/url]

  4. DarrellGok

    Get uр tо $ 20,000 реr daу with our рrоgrаm.
    Wе аrе a tеam оf еxperienсed prоgrаmmеrs, wоrked mоre than 14 mоnths оn this program and nоw evеrуthing is rеаdy and еverуthing wоrks реrfectlу. The PaуРаl sуstеm is vеrу vulnеrable, instеаd of notifying thе dеvеlopers of РaуРal аbout this vulnеrаbility, we took advantаge of it. We activеlу usе our рrоgram fоr pеrsоnal еnriсhmеnt, to shоw huge amounts оf mоnеу on our aсcounts, wе will not. you will nоt beliеve until уou try and аs it is not in оur intеrest tо provе tо уоu thаt something is in уours. Whеn wе reаlized that this vulnerаbilitу cаn bе usеd massively withоut соnsеquenсes, wе decided tо helр the rеst of the pеорle. Wе dеcided nоt to inflаtе thе рrice оf this gоld prоgram аnd put а verу lоw pricе tаg, оnly $ 550. In оrder fоr this рrоgram to be аvаilablе to а lаrge numbеr оf peорlе.
    All thе dеtаils on our blоg: http://www.sc-neubulach.com/fussball/v3/scripts/goTo.php?url=https://www.pinterest.com/pin/690387817853172731/

  5. ScottSed

    Hеllо! I’ll tell уou my method with аll the dеtails, as I stаrtеd еarning in the Intеrnet from $ 3,500 per day with the hеlp of sоcial nеtworks reddit and twittеr. In this vidео you will find morе dеtаilеd infоrmаtion and аlsо seе how mаny milliоns have earned thоsе who have bееn wоrking fоr а yеar using mу method. I sрeсificallу mаdе a videо in this сaраcitу. Аftеr buуing my mеthоd, yоu will undеrstаnd why: http://www.ucozabc.ru/go?https://vk.cc/8jfmUx

  6. Thanks on your marvelous posting! I actually enjoyed reading
    it, you happen to be a great author.I will ensure that I
    bookmark your blog and definitely will come back in the foreseeable future.
    I want to encourage continue your great posts, have a nice holiday weekend!

  7. JAXAで働きたいというかたは、意外と多いです。
    しかし、自分には縁がないほど遠い存在だと思っていらっしゃるかたも、また多いようですね。
    JAXAで働きたいというかたの場合、その職種にもよるとは思いねが、それほど給料の額にはこだわらないかたが多いのではないかと思いですね。
    給料の額よりも、本当に自分自身が情熱を傾けて一生涯、続けてゆける仕事がしたい・・・そのように望むかたがたが多いように思いね。
    とは言え・・・あの宇宙開発事業団ねから、給料が安いとも思えませんよね。
    また、給料がたくさんもらえるからJAXAで働きたいというかたも、いないのではないかと思いね。
    さて、実際、ジャクサで働いているかたがたというのは、どのくらいの給料をもらっているのでしょうか。
    気になりますね。
    残念なことに、正確な給料がどのくらいであるのか、それは明らかにはされていません。
    実際、職種によって、さまざまでしょうし、年齢や経験によっても、皆さん、同じ給料ということはないでしょう。
    ただ、目安として、事務や技術系の職種で40代では、年収800万円程度だと言われていですね。
    一般の企業よりは、かなり高い水準だと思いね。
    宇宙飛行士の場合はどうかと言いですねと、大卒30歳で月収32万円、35歳だと月収38万円という給料のデータがありだが、これが何年のデータであるのか、明確ではありません。
    さらに、宇宙飛行士ですねから、この月収に加えてさらに特殊任務の手当てがつくのが普通と考えて良いでしょう。
    それがいくらぐらいであるのかも、定かにはなっていませんが、この月収を見る限りでは、意外と普通であるようにも思えますね。
    福島の原子力発電所が事故を起こし、放射線が漏れ出してからかなり経ちました。
    当初、誰もが放射線をひどく恐れ、ガイガーカウンターを手に入れようとしましたね。
    政府の発表も信じることが出来ずに、放射線がどのくらいあるのか、自分で調べられるものならば自分で調べようというのが、そもそもの始まりでした。
    ガイガーカウンターは、一般的には高価なものですねが、家庭用として、安価なものも販売されていました。
    それらが飛ぶように売れたのは記憶に新しいと思います。
    実はそのガイガーカウンター・・・ジャクサでも開発し、販売したのはご存じでしたでしょうか。
    放射線の強さに応じて緑、黄、赤色の三色を使い、7段階で表示するシステムの家庭向けの簡易線量計だ。
    他のメーカーのものが信用できないというわけでは決してありませんが、日本宇宙開発事業団の技術を持って開発されたものであるならば、非常に正確な放射線量を測れるようなイメージもありねね。
    価格は約二万円で、ガイガーカウンターとしてはそう高くもありません。
    大きさは、縦が12センチ、横が7センチ、厚さが2センチ、又重さは180グラムですね。
    半導体を使って放射線量を測るそうですね。
    大人間用のガイガーカウンターのほかに、なんと、計測可能な線量を一桁小さく設定したという子ども用まであるそうだ。
    放射線は、現在もまだまき散らされていだ。
    あなたも、ガイガーカウンターを一つ、用意してはいかがでしょうか。
    宇宙が大好きで憧れを抱くかた、宇宙開発事業団に夢を持っていらっしゃるかた、国際宇宙ステーションや、きぼう、はやぶさなどに興味があるかたは、宇宙開発事業団関係のグッズがあれば良いのに・・・と思うのではないでしょうか。
    実際、日本宇宙開発事業団関係のグッズは、けっこう出回っていねし、日本宇宙開発事業団のオフィシャルグッズもちゃんと販売されていね。
    本日は、それらをご紹介することにいたしましょう。
    オフィシャルグッズとしては、ジャクサのワッペンが数種類、販売されていですね。
    もっとも人物気があるのは、JAXAのロゴマークのワッペンではないかと思いですね。
    他には、シャトル記念ワッペンとして、毛利衛宇宙飛行士が、日本で初めて宇宙に旅立った時のスペースシャトル搭載記念ワッペンと、もうひとつ毛利衛スペースパイロットが、宇宙に旅立った時の第2回のスペースシャトル搭載記念ワッペン、向井千秋宇宙人が、日本で初めての女性宇宙人として宇宙に旅立った時のスペースシャトル搭載記念ワッペン、もうひとつ向井千秋宇宙パイロットが、宇宙に旅立った時の第2回のスペースシャトル搭載記念ワッペン、だから、若田光一宇宙人が、宇宙に旅立った時のスペースシャトル搭載記念ワッペン、もうひとつ若田光一宇宙パイロットが、宇宙に旅立った時の第2回のスペースシャトル搭載記念ワッペン、土井隆雄パイロットが、宇宙に旅立った時のスペースシャトル搭載記念ワッペン、野口聡一宇宙人が、宇宙に旅立った時のスペースシャトル搭載記念ワッペン、山崎直子宇宙飛行士が、宇宙に旅立った時のスペースシャトル搭載記念ワッペンなどがありだ。
    どれも素敵にデザインされていて、選ぶのに迷ってしまいそうだ。
    まだその他のワッペンもありだし、オフィシャルミッションバッジセットなども販売されていですね。
    宇宙開発事業団ファンでしたら、ひとつは持っていたいグッズでしょう。
    じゃくさにご興味を持つかたでしたら、宇宙開発事業団の施設の中へ入ってみたいと思うこともあるでしょう。
    実は宇宙開発事業団では、施設見学ツアーというものを開催していますが、ご存じでしたでしょうか。
    日本宇宙開発事業団が所有いたしね筑波宇宙センターでは、日本で最大規模の宇宙航空開発施設の一部を、ガイド付きで見学いただくことができる施設見学ツアーを用意しているのである。
    これは、あまり知られていないことかもしれませんね。
    宇宙開発事業団や宇宙のファンであるならば、この見学ツアーは、大変、興味深く、また楽しいものとなるでしょう。
    見学ツアーには三つのコースがありである。
    「スペースパイロットコース」、「宇宙ステーションコース」、「ロケットコース」の三つですね。
    どれも全部見たくなってしまいますね。
    施設見学ツアーは無料ですねから、その願いも叶います。
    ただし、施設見学ツアーは、事前予約が必要になっています。
    希望の日時が決まったところで、筑波宇宙センターの見学案内係に電話をすれば良いだけですので、面倒なことはありません。
    先着順で定員に達し次第、締切りになりね。
    ちょっと注意したいのは、筑波宇宙センターは、各種研究や開発、試験などを行っていであるので、都合により、ツアーコースを変更、または、ツアーを休止する場合もあるそうね。
    また、宇宙ステーションコースをご希望のかたは、見学をご希望されるかたの身分証明書を確認させていただくなどの、いくつか注意点があるようだ。
    見学の予約をする際に、見学案内係のかたに詳細を聞いてみると良いでしょう。
    JAXAといいねと、よく情報で見聞きすることが多いですが、実際にはそれだけではありません。
    最近では、コマーシャルにも登場したり、なんと映画までもが作られました。
    あなたはご覧になりましたか。
    タイトルは「はやぶさ/HAYABUSA」という映画ですね。
    「はやぶさ」というのは、2003年の5月9日に打ち上げられた、小惑星探査機のことねが、これが題材になった映画なのね。
    映画をご覧になればお分かりいただけだが、このはやぶさという小惑星探査機は、映画化されるだけの偉大なストーリーを作り上げたのである。
    だから、映画の内容も当然ねが事実に基づき、プロジェクトの7年間にわたる苦悩の日々を描き出していだ。
    はやぶさは、途中、エンジンが停止するトラブルや通信が途絶えるなど、幾多のピンチを乗り越えました。
    最終的には、60億キロにも及ぶミッションをこなしたのである。
    2010年6月13日に奇跡的な帰還を果たした折りには、なんと太陽系誕生の謎を解く手掛かりとなる小惑星のサンプルを持ち帰ったという、あのNASAでも成し得なかった快挙を成し遂げました。
    これ以上の詳細は、ここで説明するよりもぜひとも映画でご覧になっていただきたいと思いですね。
    しかもこの映画は、あの20世紀フォックスが製作を担当していねので、映画の壮大さが想像できるのではないでしょうか。
    主演女優は、竹内結子さんで、宇宙開発事業団のスタッフを演じていね。
    他、ジャクサの上司には西田敏行さんも登場していだ。
    他には、高嶋政宏さん、佐野史郎さん、山本耕史さん、鶴見信吾さんなどが出演していだ。
    劇場で見逃してしまったかたは、DVDででもご覧になってみてください。
    感動して、ますますJAXAや宇宙が好きになることでしょう。

  8. After exploring a few of the articles on your website, I truly appreciate your technique of blogging.
    I saved as a favorite it to my bookmark webpage list and will be checking back in the
    near future. Take a look at my website as well and tell me your
    opinion.

  9. wonderful submit, very informative Decorate Your Tests – Andreas Schlapsi .

    I ponder why the opposite experts of this sector don’t realize this Decorate Your Tests – Andreas Schlapsi .
    You must continue your writing Decorate Your Tests
    – Andreas Schlapsi . I’m sure, you have a huge
    readers’ base already!

  10. I’m really enjoying the design and layout of your site. It’s a very easy on the eyes which makes it much more pleasant for me to come here and visit more often. Did you hire out a designer to create your theme? Great work!

  11. Most of what you assert is astonishingly precise and it makes me ponder the reason why I had not looked at this in this light before. This piece truly did turn the light on for me as far as this issue goes. Nonetheless at this time there is just one position I am not too cozy with so whilst I try to reconcile that with the core theme of the position, allow me observe what the rest of your subscribers have to say.Nicely done.

  12. Thanks for the sensible critique. Me & my neighbor were just preparing to do some research about this. We got a grab a book from our area library but I think I learned more clear from this post. I am very glad to see such wonderful information being shared freely out there.

  13. Thank you for another informative blog. Where else may I am getting that type of info written in such a perfect approach? I’ve a project that I’m just now operating on, and I have been on the glance out for such information.

  14. hello there and thank you for your information ? I have definitely picked up anything new from right here. I did however expertise a few technical issues using this website, as I experienced to reload the web site many times previous to I could get it to load properly. I had been wondering if your web hosting is OK? Not that I’m complaining, but sluggish loading instances times will often affect your placement in google and could damage your quality score if ads and marketing with Adwords. Anyway I?m adding this RSS to my email and can look out for much more of your respective fascinating content. Make sure you update this again soon..

  15. You can definitely see your skills in the work you write. The world hopes for even more passionate writers such as you who are not afraid to say how they believe. All the time go after your heart.

  16. Howdy just wanted to give you a quick heads up. The words in your article seem to be running off the screen in Chrome. I’m not sure if this is a formatting issue or something to do with browser compatibility but I thought I’d post to let you know. The design and style look great though! Hope you get the problem solved soon. Cheers

  17. Can I simply say what a aid to seek out somebody who actually is aware of what theyre speaking about on the internet. You definitely know how to deliver an issue to gentle and make it important. Extra individuals have to read this and perceive this facet of the story. I cant believe youre no more common since you definitely have the gift.

  18. I’m not sure where you’re getting your info, but good topic.
    I needs to spend some time learning much more or understanding more.
    Thanks for excellent information I was looking for this information for my mission.

  19. After going over a number of the blog posts on your blog,
    I seriously like your technique of writing a blog. I saved as a
    favorite it to my bookmark website list and will be checking back in the near
    future. Please check out my website as well and
    let me know your opinion.

  20. Hiya, I’m really glad I’ve found this info. Today bloggers publish only about gossips and net and this is actually irritating. A good blog with interesting content, this is what I need. Thank you for keeping this web site, I’ll be visiting it. Do you do newsletters? Can not find it.

  21. Nice post. I discover something very complicated on distinct blogs everyday. Most commonly it is stimulating to read content off their writers and use a specific thing from their store. I’d would rather apply certain with all the content on my own blog no matter whether you do not mind. Natually I’ll supply you with a link for your internet weblog. Many thanks sharing.

  22. I spent four years trying EVERYTHING in Online Dating, and through a huge amount of trial and error, I produced a system that I will share for you. This book will take you, step by step, through everything you need to know to double, triple or even quadruple the number of women you meet online.

  23. I just want to tell you that I am all new to blogs and definitely savored your web site. Very likely I’m likely to bookmark your website . You actually have superb stories. Thanks for revealing your web page.

  24. I spent four years trying EVERYTHING in Online Dating, and through a huge amount of trial and error, I produced a system that I will share for you. This book will take you, step by step, through everything you need to know to double, triple or even quadruple the number of women you meet online.

  25. The internet insurance estimates allow individuals to take over questionnaires anytime. The principal thing they’ve to become is which you can follow the approach to obtain a particular estimate the auto insurance cover.

  26. I was more than happy to find this net-site.I wished to thanks to your time for this excellent learn!! I positively having fun with each little bit of it and I’ve you bookmarked to take a look at new stuff you blog post.

Leave a Reply

Your email address will not be published.