NUnit: как протестировать закрытый метод с параметром "ref" в C # - PullRequest
3 голосов
/ 15 июля 2010

У меня есть закрытый метод, как показано ниже:

int void SomeMethod(ref string theStr)
{
   // Some Implementation
}

как написать пример модульного теста для этого метода.

Ответы [ 4 ]

7 голосов
/ 15 июля 2010

Кажется немного бессмысленным, что метод недействителен, но принимает параметр ref.Возможно, имеет смысл вернуть строку:

public class FooBar {
 internal string SomeMethod(ref string theStr) { 
    // Some Implementation 
    return theStr;
 }
}

Мы также сделаем это internal и укажите атрибут InternalVisibleTo в файле AssemblyInfo.cs:

 [assembly: InternalsVisibleTo("Test.Assembly")]

ThisSomeMethod будет вести себя так, как если бы он был внутренним (т.е. не виден снаружи сборки), за исключением Test.Assembly, который будет отображаться как public.

. Модульный тест довольно тривиален (независимо отне требуется ref параметр).

[Test]
public void SomeMethodShouldReturnSomething() { 
   Foobar foobar = new Foobar();
   string actual;
   foobar.SomeMethod(ref actual);
   Assert.AreEqual("I'm the test your tests could smell like", actual);
}
1 голос
/ 15 июля 2010

Я обычно делаю метод защищенным и предоставляю тестируемый класс, который наследует.Например:

class Foo
{
  protected void SomeMethod(ref string theStr) { ... }
  ...
}

class TestableFoo
{
  public void TestableSomeMethod(ref string theStr)
  {
    base.SomeMethod(...);
  }
  ...

Я думаю, вы найдете ответы, которые говорят: «Вы не должны тестировать частные методы», но есть случаи, когда я считаю, что было бы полезно использовать некоторые хитрые функции,Но потом я также обнаружил, что в этих ситуациях лучше извлечь функцию в отдельный отдельный тестируемый класс.YMMV.

0 голосов
/ 15 июля 2010

Если это так важно проверить, возможно, вам следует просто обнародовать его и покончить с этим. (Хотя я понимаю, что это не совсем отвечает на ваш вопрос).

Не все согласятся сделать что-то публичное только для тестирования, но я думаю, что это лучше, чем некоторые альтернативы.

0 голосов
/ 15 июля 2010

Мой вопрос был о том, как написать пример модульного теста для закрытого метода, имеющего параметр ref.

Некоторые говорят, что изменить реализацию невозможно. может быть, я дал некоторую неправильную реализацию в фрагменте кода, но это не было моей целью.

Некоторые говорят, что не нужно тестировать приватный метод. но в некотором сценарии требуется проверить этот метод, например, в каком-то коде безопасности.

Ответ таков: мне нужно использовать отражение и установить set namedparameterAction от монахини. мне нужно явно указать, что параметр perticular является ref.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...