Вызов PSCmdlet в модульном тестовом примере на C#

#c# #powershell #xunit

Вопрос:

Я использую тестовую платформу xUnit, и ниже приведен тестовый случай, созданный для тестирования моих cmndlets powershell, и при сборке нет ошибок. Мой проект PowerShell также построен в том же решении и правильно указан в моем тестовом проекте.

приведенная ниже команда PowerShell работает локально и дает мне желаемый результат(как показано ниже)

 $rec = Get-Recording -Project 'Demo'
$rec.Count
64
 

Я пытаюсь протестировать то же самое в своем модульном тестовом примере, и вот мой код. Я не получаю здесь никакого результата, одно сообщение, которое я получаю в строке Invoke (), гласит: «Командлеты, полученные из PSCmdlet, не могут быть вызваны напрямую».. может ли кто-нибудь помочь мне в завершении этого тестового примера и получить результат, как я получаю в окне Powershell выше.

 [Fact]
    public void TestGetRecordings()
        {
        // Arrange.
        
        var cmdlet = new GetRecordingsCmd()
        {
            Project = "Demo"
        };
        

        // Act.
        var result = cmdlet.Invoke().OfType<List<string>>();
       // Assert.True( result, 64 );
       
 

Мой cmndlet Powershell определен следующим образом. Я просто упоминаю здесь класс и то, как наследуется мой фактический класс:

 public class TorgCmd : PSCmdlet
public abstract class GetDocumentsBaseCmd : TorgCmd {}
public class GetRecordingsCmd
        : GetDocumentsBaseCmd
    {}
 

Комментарии:

1. Вы пробовали создать экземпляр PowerShell для запуска командлета?

2. Кстати, вам также необходимо использовать полную версию Microsoft. PowerShell. Пакет SDK в вашем тестовом проекте, если вы еще этого не сделали. У многих людей изначально возникают проблемы с тестированием, когда они используют стандартную библиотеку.

3. Я следил за блогом и ничего не мог увидеть при создании экземпляра.. не могли бы вы уточнить, что вы хотите, чтобы я попробовал github.com/deadlydog/PowerShellCmdletInCSharpExample/blob/…

4. при добавлении Powershell. Пакет SDk, я получаю ошибку при вызове, поскольку «Тип» PSCmdlet » определен в сборке, на которую нет ссылки. Вы должны добавить ссылку на сборку » System.Management. Автоматизация».»

5. У вас есть using System.Management.Automation ссылка в верхней части файла? Используете ли вы соответствующую версию SDK? Наследует ли ваш фактический командлет от Cmdlet или PSCmdlet ?