Set - хороший подход здесь, потому что он заказывает переменные, что кажется вашей целью здесь. {z,y,x}
- {0,1,3}
независимо от порядка параметров.
>>> ["cdef"[i] for i in {z,x,y}]
['c', 'd', 'f']
Таким образом, все решение O (n).
Попробуйте использовать TestContext.WriteLine()
, который выводит текст в результатах теста.
Пример:
[TestClass]
public class UnitTest1
{
private TestContext testContextInstance;
/// <summary>
/// Gets or sets the test context which provides
/// information about and functionality for the current test run.
///</summary>
public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}
[TestMethod]
public void TestMethod1()
{
TestContext.WriteLine("Message...");
}
}
«Магия» описана в MSDN как «База тестов автоматически устанавливает свойство, которое затем можно использовать в модульных тестах».
Я не получаю никакого вывода, когда мои настройки Test / Test Settings / Default Processor Architecture и сборки, которые ссылаются на мои тестовые проекты, не совпадают. В противном случае Trace.Writeline () работает нормально.
Trace.WriteLine
должен работать, если вы выберете правильный вывод (раскрывающийся список с надписью «Показать вывод из», найденным в окне «Выход»)
Я использую xunit, поэтому это то, что я использую: Debugger.Log(0, "1", input);
PS: вы можете использовать Debugger.Break();
, чтобы вы могли видеть, что вы входите в систему out
Вы уверены, что выполняете свои модульные тесты в Debug? Debug.WriteLine не будет отбрасываться в версиях выпуска.
Две возможности для проверки:
Это зависит от вашего тестового бегуна ... например, я использую XUnit, поэтому, если это то, что вы используете, следуйте этим инструкциям:
https: // xunit. github.io/docs/capturing-output.html
Этот метод группирует ваш вывод с каждым конкретным модульным тестом.
using Xunit; using Xunit.Abstractions; public class MyTestClass { private readonly ITestOutputHelper output; public MyTestClass(ITestOutputHelper output) { this.output = output; } [Fact] public void MyTest() { var temp = "my class!"; output.WriteLine("This is output from {0}", temp); } }
Есть еще один метод, указанный в ссылке Я предусмотрел запись в окно вывода, но предпочитаю предыдущий.
Я думаю, что это все еще актуально.
Вы можете использовать этот пакет NuGet: https://www.nuget.org/packages/Bitoxygen.Testing.Pane/
Вызвать собственный метод WriteLine из этой библиотеки. Он создает тестовую панель внутри окна вывода и всегда размещает сообщения (во время каждого тестового прогона независимо от флагов DEBUG и TRACE).
Чтобы сделать трассировку более легкой, я могу рекомендовать создать базовый класс:
[TestClass]
public abstract class BaseTest
{
#region Properties
public TestContext TestContext { get; set; }
public string Class
{
get { return this.TestContext.FullyQualifiedTestClassName; }
}
public string Method
{
get { return this.TestContext.TestName; }
}
#endregion
#region Methods
protected virtual void Trace(string message)
{
System.Diagnostics.Trace.WriteLine(message);
Output.Testing.Trace.WriteLine(message);
}
#endregion
}
[TestClass]
public class SomeTest : BaseTest
{
[TestMethod]
public void SomeTest1()
{
this.Trace(string.Format("Yeah: {0} and {1}", this.Class, this.Method));
}
}
Решено в следующем примере:
public void CheckConsoleOutput()
{
Console.WriteLine("Hi Hi World");
Trace.WriteLine("Trace Trace the World");
Debug.WriteLine("Debug Debug WOrld");
Assert.IsTrue(true);
}
После запуска этого теста в разделе «Test Passed» есть возможность просмотреть вывод, который откроет окно вывода.
Немного поздно к разговору.
Я также пытался заставить Debug или Trace или Console или TestContext работать в Unit Testing.
Ни один из этих методов не появился работать или показывать вывод в окне вывода.
Trace.WriteLine("test trace");
Debug.WriteLine("test debug");
TestContext.WriteLine("test context");
Console.WriteLine("test console");
VS2012 и Greater (из комментариев) В Visual Studio 2012 нет значка. Вместо этого в результатах теста есть ссылка, называемая Output. Если вы нажмете на ссылку, вы увидите все WriteLine
.
До VS2012 я тогда заметил в окне результатов теста, после запуска теста, рядом с зеленым кругом успеха, есть другой значок, я удвоил его. Это были мои результаты теста, и он включал все типы писем выше.
В Visual Studio 2017 вы можете увидеть результат из тестового проводника.
1) В вашем методе проверки Console.WriteLine («что-то»);
2) Запустите тест.
3) В окне тестового проводника нажмите Пропущенный тестовый метод.
4) И нажмите ссылку «Выход».
И нажмите «Выход», вы увидите результат Console.Writeline ().
Попробуйте использовать:
Console.WriteLine()
Вызов Debug.WriteLine
будет выполнен только во время определения DEBUG.
Другие предложения use: Trace.WriteLine
, но я этого не пробовал.
Существует также опция (не уверен, что VS2008 имеет ее), но вы все равно можете использовать Debug.WriteLine
при запуске теста с помощью Test With Debugger
в IDE