Sunday, March 2, 2008
Monday, January 14, 2008
When you write unit tests, you need call some methods and compare their results with expected values as well as check overall state of objects through fields and properties. It is good to separate tests from testing code. But, what about testing private fields and methods? In addition, tests may be in a standalone assembly. Have a look at the possible ways:
|everything is public||Breaks API|
|private -> internal||Keeps API, but tests must be in the same assmebly|
|private -> internal, InternalsVisibleToAttribute||Keeps API and tests may be in separated assembly|
The last way is the right one.
internalmodifier is clear. Be careful about protected fields, their modifier should be
protected internal. All members are visible within the scope of assembly, but tests are in a separated assembly. What now? The
InternalsVisibleToAttributecomes in handy.
InternalsVisibleToAttributeis supported in .NET framework 2.0 and higher. This attribute specifies the "friend assembly" - assembly, that has access to all internal members. So, the last one step is to add the following line to AssemblyInfo.cs file:
Monday, November 12, 2007
Hurray! There is a new and faster Device Emulator in Visual Studio 2005. Deployment and debugging of .NET Compact Framework apps used to be very slow and tiring. Some bugs were fixed and deployment is significantly faster in Device Emulator ver. 2.0 (download here). Installer will replace the old version in your Visual Studio.
Friday, September 21, 2007
Recently I have produced a code with strange behaviour in my real C# project. Look at this code:
There is nothing strange. The method
Mystery.Foo(int)is called repeatedly. Then I replaced hidding method
Mystery.Foo(int)by overriding method:
And the output is:
Hah! What is the matter? Let us go to explore IL code of method
ihas been boxed. Why? I would expect that the IL body of method
Mystery.Foo(int)will be the same in new and override declaration but it is different. It is very strange behaviour of compiler. What is your explanation?
Overridded method in my real project was the right one. In addition, I renamed the methods, because my colleagues could be confused like me.
Monday, September 17, 2007
Launching tests directly from Visual Studio is very comfortable feature. Developers, who are familiar with test driven development, need to launch tests frequently, so this feature is necessary for them.
My favourite testing framework is NUnit. Tests in this framework are launched from external application with perfect GUI.
In this article I will demonstrate how to start external application from Visual Studio, e.g. NUnit GUI, and keep running debugger. Debugging NUnit tests is very significant advantage because standard GUI of NUnit framework does not support it.
So, suppose that you have created a class library project with the following NUnit test:
Now, you want to start this test directly from Visual Studio and use some breakpoints in the test. You can do it without any VS plug-in, just edit project settings. Open Project | Properties | Debug and set values like this:
Enter Start external program and Command line arguments, that is the path to the assembly containing your test.
For launching NUnit GUI and debugging tests press F5.
Monday, June 11, 2007
It is usual, that you write an application with GUI for a specified culture and then you suddenly get to know that the application should work with several different currency formats. In the following example I want to demonstrate a very simple method how to change the currency format in your application elegantly and dynamically.
Ordinarily numbers are formatted as currency by these ways:
Actually, there are many places like this in your application and you want to change the format depending on user's choice of culture. The following code comes in handy:
The whole example is:
List of all available culture names and identifiers is on MSDN.
Thursday, May 24, 2007
Maybe you wondered about syntax-highlighted code in this blog but
blogger.com does not provide any tool for this. If you use Visual Studio, just try this CopySourceAsHtml add-in.
CopySourceAsHtml generates HTML source of your syntax-highlighted code in VS. You can select and copy your code as HTML to clipboard, so your syntax-highlighted code can be placed anywhere.
Here are my settings of CopySourceAsHtml add-in:
My "File Style" is:
Here is an example output: