Partilhar via


Conjuntos de regras de teste usando o Microsoft Rules Composer

Aplica-se a: Aplicativos Lógicos do Azure (Padrão)

Este guia mostra como testar conjuntos de regras usando o Microsoft Rules Composer e inclui exemplos de saída para testes de regras.

Por que testar os conjuntos de regras de forma incremental?

À medida que constróis um conjunto de regras para integrar a lógica de negócio com os fluxos de trabalho da tua aplicação de lógica padrão, testa o teu conjunto de regras de forma incremental, ou pelo menos antes de usares as regras na tua aplicação. Assim, podes confirmar que cada regra funciona como esperas, ou encontrar e corrigir problemas mais cedo quando as tuas regras forem menos complexas e mais fáceis de resolver.

Se esperares para testar todas as tuas regras ao mesmo tempo, especialmente quando as regras são longas ou complexas, podes ter mais erros do que o esperado, o que demora mais a resolver e é mais difícil de depurar.

Pré-requisitos

  • Transfira e instale o Microsoft Rules Composer.

  • O arquivo XML que contém o conjunto de regras no qual você deseja trabalhar e os fatos que deseja testar.

    Para adicionar fatos, especifique seus valores nos arquivos XML aos quais você faz referência na janela Selecionar fatos que é aberta depois que você seleciona Conjunto de regras de teste nas etapas a seguir. Talvez você queira criar um criador de fatos para adicionar fatos do .NET. Para obter mais informações, consulte Criar criadores e recuperadores de fatos.

Testar uma versão do conjunto de regras

  1. Abra o Microsoft Rules Composer. Na janela RuleSet Explorer, selecione a versão do conjunto de regras que você deseja testar, o que abre a janela de informações da versão.

  2. No menu de atalho da versão do conjunto de regras, selecione Testar conjunto de regras.

    Na caixa Selecionar fatos exibida, a janela superior mostra os tipos de fatos referenciados pelas regras do conjunto de regras.

  3. Para adicionar uma instância de fato, em Documentos XML ou Classes .NET, selecione um tipo de fato correspondente e, em seguida, selecione Adicionar Instância.

    Nota

    Se você declarar uma classe derivada em uma regra, mas as regras forem escritas diretamente em relação aos membros da classe base, uma instância de classe base será afirmada em vez disso, e as condições serão avaliadas em relação à instância da classe base.

  4. Para remover uma instância de fato, selecione o tipo de fato correspondente e, em seguida, selecione Remover instância.

  5. Para adicionar um criador de fatos que você criou, na janela Criadores de fatos , selecione Adicionar.

  6. Quando estiver pronto, selecione Testar.

    A janela Saída mostra a saída de rastreamento de teste do conjunto de regras.

  7. Abra o menu de atalho para a janela de saída do teste e selecione uma opção para salvar, limpar, selecionar ou copiar o texto de saída para que você possa revisar os resultados.

    A tabela a seguir descreve os comandos da janela Saída que você pode usar para trabalhar com o texto de saída:

    Tarefa Comando de atalho
    Limpe todo o texto da janela Saída. Apagar tudo
    Copie o texto selecionado na janela de saída para a área de transferência. Copiar
    Selecione todo o texto na janela de Saída. Selecionar tudo
    Salve o texto contido na janela Saída em um arquivo especificado. Guardar no ficheiro

Saída de rastreio do teste do conjunto de regras

Esta seção descreve as informações de rastreamento e as atividades incluídas com o rastreamento ao testar um conjunto de regras usando o Microsoft Rules Composer. A saída de monitorização pode incluir os seguintes tipos de declarações:

  • Atividade de fato
  • Avaliação da condição
  • Atualização da agenda
  • Regra despedida

Atividade de fato

Esta atividade indica alterações nos fatos na memória de trabalho do motor. O exemplo a seguir mostra uma entrada de atividade factual:

FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872

A tabela a seguir descreve as informações nesta entrada:

Iteme Descrição
Identificador de instância do mecanismo de regra Um identificador exclusivo para a instância RuleEngine que fornece o ambiente de execução para a execução da regra.
Nome do conjunto de regras O nome do conjunto de regras.
Operação Os seguintes tipos de operação podem ocorrer em uma atividade de fato:

- Asserção: Um fato é adicionado à memória de trabalho. Nota: Se o tipo de um fato afirmado não corresponder a nenhum dos tipos usados no conjunto de regras, a função Assert mostrará o erro "Assert – Fact Unrecognized".

- Atualização: uma regra atualiza um fato, que deve ser reafirmado no mecanismo para reavaliação, com base nos novos dados e estado.

- Retrair: Um fato é removido da memória de trabalho.
Tipo de objeto O tipo de fato para uma atividade específica: - TypedXmlDocument

Asserções são mostradas para instâncias TypedXmlDocument pai e filho.
Identificador de instância de objeto O ID de instância exclusivo para a referência de fato.

Avaliação da condição

Esta atividade indica o resultado da avaliação de predicados individuais. O exemplo a seguir mostra uma entrada de avaliação de condição:

CONDITION EVALUATION TEST (MATCH) 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:Root.EmploymentType/TimeInMonths >= 18
Left Operand Value: 31
Right Operand Value: 18
Test Result: True

A tabela a seguir descreve as informações nesta entrada:

Iteme Descrição
Expressão de teste Uma simples expressão unária ou binária dentro de uma regra.
Valor do operando esquerdo O valor do termo no lado esquerdo de uma expressão.
Valor do operando correto O valor do termo do lado direito de uma expressão.
Resultado do teste O resultado da avaliação, que é Verdadeiro ou Falso.

Atualização da agenda

Esta atividade indica as regras que são adicionadas à agenda do mecanismo de regras para execução subsequente. O exemplo a seguir mostra um exemplo de entrada de atualização de agenda:

AGENDA UPDATE 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: Employment Status Rule
Conflict Resolution Criteria: 0

A tabela a seguir descreve as informações nesta entrada:

Iteme Descrição
Operação A operação que adiciona ou remove regras da agenda.
Nome da regra O nome da regra que é adicionada ou removida da agenda.
Critérios de Resolução de Conflitos A prioridade de uma regra, que determina a ordem relativa de quando as ações são executadas e onde as ações de prioridade mais alta são executadas primeiro.

Regra despedida

Esta atividade indica a execução das ações de uma regra. O exemplo a seguir mostra uma entrada acionada por regra:

RULE FIRED 1/07/2023 5:33:13 PM
Rule Engine Instance Identifier: f1dd3ff2-b4a8-4fe1-8d46-4d9b3e2502d3
Ruleset Name: LoanProcessing
Rule Name: Residency Status Rule
Conflict Resolution Criteria: 10

Função Update

Este exemplo mostra uma regra "InventoryCheck" de exemplo e uma regra "Ship" em um conjunto de regras de exemplo chamado "Order". Quando a regra é verificada pela primeira vez, a condição associada à regra "Ship" é avaliada como False. No entanto, quando a regra "InventoryCheck" é acionada, o campo InventoryAvailable no Order é alterado e o comando Update é emitido para o mecanismo para o objeto "Order", causando reavaliação para a regra "Ship". Desta vez, a condição é avaliada como True e a regra 'Ship' é acionada.

Nota

Se as suas regras forem escritas incorretamente, o encadeamento para a frente com a função Update pode causar um loop infinito. Nesse caso, quando você testa o conjunto de regras no Microsoft Rules Composer, você recebe uma mensagem de erro com o texto "O mecanismo de regras detetou um loop de execução."

Regra InventoryCheck

IF Inventory.AllocateInventory == True
THEN Order.InventoryAvailable == True
Update(Order)

Regra do navio

IF Order.InventoryAvailable == True
THEN Shipment.ShipOrder

Saída

RULE ENGINE TRACE for RULESET: Order 3/17/2023 10:31:17 AM
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: null
Right Operand Value: True
Test Result: False
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Assert
Object Type: TestClasses.Inventory
Object Instance Identifier: 446
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Inventory.AllocateInventory == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: InventoryCheck
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Update
Object Type: TestClasses.Order
Object Instance Identifier: 448
CONDITION EVALUATION TEST (MATCH) 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Test Expression: TestClasses.Order.inventoryAvailable == True
Left Operand Value: True
Right Operand Value: True
Test Result: True
AGENDA UPDATE 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Add
Rule Name: Ship
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Rule Name: Ship
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Order
Object Instance Identifier: 448
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Shipment
Object Instance Identifier: 447
FACT ACTIVITY 3/17/2023 10:31:17 AM
Rule Engine Instance Identifier: 533f2fb6-a91f-49c1-8f36-e03a27ca9d72
Ruleset Name: Order
Operation: Retract
Object Type: TestClasses.Inventory
Object Instance Identifier: 446

Exemplos de saída de rastreamento de teste de conjunto de regras

Esta seção fornece exemplos que mostram a saída do teste do conjunto de regras para diferentes tipos de fatos.

Tipo de facto da classe .NET

Este exemplo é uma regra de exemplo chamada "TestRule1" em um conjunto de regras chamado "LoanProcessing":

IF test.get_ID > 0
THEN <do something>

Saída

RULE ENGINE TRACE for RULESET: LoanProcessing 3/16/2023 9:50:28 AM
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: MyTest.test
Object Instance Identifier: 872
CONDITION EVALUATION TEST (MATCH) 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Test Expression: MyTest.test.get_ID > 0
Left Operand Value: 100
Right Operand Value: 0
Test Result: True
AGENDA UPDATE 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/16/2023 9:50:28 AM
Rule Engine Instance Identifier: 9effe3f9-d3ad-4125-99fa-56bb379188f7
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: MyTest.test
Object Instance Identifier: 872

Tipo de fato TypedXmlDocument

Este exemplo mostra que uma entidade TypedXmlDocument com o tipo de documento chamado Microsoft.Samples.BizTalk.LoansProcessor.Case é declarada no mecanismo de regras. Com base no valor XPath Selector definido na regra, o mecanismo cria e afirma uma entidade filho TypedXmlDocument com o tipo chamado Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType, com base no tipo de documento e na cadeia de caracteres do seletor. A entidade filha TypedXmlDocument é avaliada como True na condição, o que causa uma atualização da agenda e o disparo da regra. As entidades TypedXmlDocument pai e filho são posteriormente removidas.

Este exemplo mostra a regra de exemplo chamada "TestRule1" em um conjunto de regras chamado "LoanProcessing":

IF Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
THEN <do something>

Saída

RULE ENGINE TRACE for RULESET: LoanProcessing 3/17/2023 9:23:05 AM
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Assert
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853
CONDITION EVALUATION TEST (MATCH) 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Test Expression: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType.TimeInMonths >= 4
Left Operand Value: 6
Right Operand Value: 4
Test Result: True
AGENDA UPDATE 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Add
Rule Name: TestRule1
Conflict Resolution Criteria: 0
RULE FIRED 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Rule Name: TestRule1
Conflict Resolution Criteria: 0
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case
Object Instance Identifier: 858
FACT ACTIVITY 3/17/2023 9:23:05 AM
Rule Engine Instance Identifier: 51ffbea4-468f-4ce8-8ab7-977cadda2e2b
Ruleset Name: LoanProcessing
Operation: Retract
Object Type: TypedXmlDocument:Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType
Object Instance Identifier: 853