Как зайти в тестовый блок и оставить в MSTest - PullRequest
3 голосов
/ 07 октября 2010

Я использую MSTest и хочу записать запись в журнал до выполнения теста и после его завершения.Очевидно, что я не хочу добавлять пользовательский код регистрации в начале и конце каждого теста - это только сделает тест нечитаемым и потребует много усилий (у меня> 500 тестов)

Использование TestInitialize и TestCleanup показались мне подходящими, но я не могу получить название теста.

Кто-нибудь знает, как это сделать?

Ответы [ 3 ]

3 голосов
/ 17 октября 2010

В MSTest имя тестового примера доступно в свойстве контекста теста .Таким образом, чтобы получить доступ к нему в методе инициализации теста (а также очистки теста), вы можете использовать что-то вроде этого: -

    [TestInitialize()]
    public void MyTestInitialize() 
    {
        if (string.Equals(**TestContext.TestName**, "TestMethod1", StringComparison.OrdinalIgnoreCase))
        { 
        }
    }

С уважением Aseem Bansal

1 голос
/ 09 января 2013

Мы используем nLog для ведения журнала и базовый класс для инициализации теста и очистки теста, который регистрирует, прошел тест или нет.

Это базовый класс:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using NLog;

namespace Tests
{
    public class TestBase
    {
        private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

        public TestContext TestContext { get; set; }

        [TestCleanup]
        public void TestCleanup()
        {
            string testName = string.Format("{0}.{1}", TestContext.FullyQualifiedTestClassName, TestContext.TestName);
            UnitTestOutcome currentTestOutcome = TestContext.CurrentTestOutcome;
            string message = string.Format("Test '{0}' {1}", testName, currentTestOutcome.ToString().ToUpperInvariant());
            if (currentTestOutcome != UnitTestOutcome.Passed)
            {
                Logger.Error(message);
            }
            else
            {
                Logger.Info(message);
            }
        }

        [TestInitialize]
        public void TestInitialize()
        {
            string testName = string.Format("{0}.{1}", TestContext.FullyQualifiedTestClassName, TestContext.TestName);
            Logger.Info("Started with test '{0}'", testName);
        }
    }
}

И вот его использование

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Tests
{
    [TestClass]
    public class JustTest : TestBase
    {
        [TestMethod]
        public void Fail()
        {
            Assert.IsTrue(false);
        }

        [TestMethod]
        public void Pass()
        {
            Assert.IsTrue(true);
        }
    }
}

Вот часть из файла журнала

Started with test 'Tests.JustTest.Fail'
Test 'Tests.JustTest.Fail' FAILED

Started with test 'Tests.JustTest.Pass'
Test 'Tests.JustTest.Pass' PASSED
0 голосов
/ 07 октября 2010

Обновление: хорошо, теперь я вижу, к чему вы клоните. Плохая новость - я не использую MSTest или прибор MSTest, чтобы узнать ...

В NUnit вы можете

>"nunit-console.exe" API_Tests.dll /out:My.log /labels

Это выводит следующий файл журнала

***** Test.Gumba.API_Tests.Tests.ArithmeticProgression.DummyTest2
Woohoo! made it till test2
***** Test.Gumba.API_Tests.Tests.ArithmeticProgression.GeneratesTheRightProgressionAsSpecifiedByTheUser
Try#0 failed. due to 0. Retrying NUnit.Framework.AssertionException:   Expected is <System.Int32[10]>, actual is <System.Int32[0]>
<snipped>...

Я смотрел на ключи командной строки для MSTest , и следующее выглядит интересно

mstest /testcontainer:Some.dll /detail:testname

--------------- предыдущий ответ следует -----
Чтобы ответить на ваш вопрос по существу, методы «Выполнить вокруг» могут быть выполнены с использованием метода, который принимает делегата. Однако, если бы вы могли уточнить, зачем вам это нужно, возможно, есть лучшее решение для достижения того, чего вы хотите после

, например

private void LogAround(Action action)
{
  // log entry with calling method name using StackTrace class
  action();
  // log exit
}

и звонки будут

Do( delegate {
  // test code
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...