How do you test private methods?
This morning I read a post by Davy Brion who was explaining a technique to test private methods. Although the post was interesting, it was a comment by Rafferty Uy that got me thinking. He suggests that you make your method protected instead of private and have the testing class inherit from this class. There is much debate as to whether you should be testing private methods at all, and as I am fairly new to unit testing, I have only ever tested my public methods.
From Microsoft:-
The type or member can only be accessed by code in the same class or struct, or in a derived class.
(http://msdn.microsoft.com/en-us/library/ms173121.aspx)
So that is fine if your tests live in the same project as the code being tested. You just inherit from the class. If however you have all your tests in a separate project, then you simply need to have a reference to the .dll or .exe of your main project with the methods that need testing. Add the namespace to your using list and inherit the class in your test class.
1: using NUnit.Framework;
2: using Spike.PrivateMethodTest;
3:
4: namespace Spike.UnitTests
5: {
6: [TestFixture()]
7: public class Class1 : Spike.PrivateMethodTest.Program
8: {
9: [Test()]
10: public void TestPublicMethod()
11: {
12: string expectedValue = "this is public";
13: string actualValue = Program.MyPublicMethod();
14: Assert.AreEqual(expectedValue, actualValue);
15: }
16:
17: [Test()]
18: public void TestPrivateMethod()
19: {
20: string expectedValue = "this is private";
21: string actualValue = Program.MyPrivateMethod();
22: Assert.AreEqual(expectedValue, actualValue);
23: }
24: }
25: }
This technique seems by far the simplest I have come across to allow you to test private methods.