I know that the question is about NUnit and I don't want to argue whether it's a good or bad practice to test private members. The fact is that it's sometimes necessary, especially when you have to deal with legacy or poorly designed code that you can't refactor.
So I would like to mention that Gallio/MbUnit provides a light API called Mirror to ease testing with private type members.
Example: the following test sample invokes the private method named SomePrivateMethod
on the foo
instance.
[Test]
public void SampleTest()
{
var foo = new Foo();
int actual = Mirror.ForObject(foo)["SomePrivateMethod"].Invoke();
Assert.AreEqual(123, actual);
}