Testar conjuntos de regras usando o Microsoft Rules Composer (versão prévia)
Aplica-se a: Aplicativos Lógicos do Azure (Standard)
Importante
Esse recurso está em versão prévia e está sujeito aos Termos de uso suplementares para versões prévias do Microsoft Azure.
Ao criar o conjunto de regras para integrar a lógica de negócios aos fluxos de trabalho Standard, teste o conjunto de regras de forma incremental ou antes de usar as regras no aplicativo. Dessa forma, você pode verificar se as regras funcionam da maneira esperada ao longo do caminho ou pode encontrar e corrigir problemas mais cedo quando suas regras são menos complexas e mais fáceis de solucionar.
Se você esperar para testar todas as regras ao mesmo tempo ou quando todas estiverem prontas, e as regras forem longas ou complexas, você poderá ter mais erros ou problemas do que imaginava, o que pode levar mais tempo para resolver ou ser difícil de solucionar.
Pré-requisitos
Faça o download e instale o Microsoft Rules Composer.
O arquivo XML que contém o conjunto de regras com o qual você quer trabalhar e os fatos que quer testar.
Para adicionar fatos, especifique seus valores nos arquivos XML que você referencia na janela Selecionar Fatos que é aberta depois de selecionar 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, confira Criar criadores e recuperadores de fatos.
Testar uma versão do conjunto de regras
Abra o Microsoft Rules Composer. Na janela Explorador do Conjunto de Regras, selecione a versão do conjunto de regras que você quer testar, o que abrirá a janela de informações da versão.
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 fato referenciados pelas regras do conjunto de regras.
Para adicionar uma instância de fato, em Documentos XML ou Classes .NET, selecione um tipo de fato correspondente e selecione Adicionar Instância.
Observação
Se você declarar uma classe derivada em uma regra, mas as regras forem gravadas diretamente nos membros da classe base, uma instância da classe base será declarada e as condições serão avaliadas na instância da classe base.
Para remover uma instância de fato, selecione o tipo de fato correspondente e selecione Remover Instância.
Para adicionar um criador de fatos que você criou, na janela Criadores de Fatos, selecione Adicionar.
Quando estiver pronto, selecione Teste.
A Janela de Saída mostra a saída do rastreamento do teste do conjunto de regras.
Abra o menu de atalho da 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 examinar os resultados.
A tabela a seguir descreve os comandos da Janela de Saída que você pode usar para trabalhar com o texto de saída:
Tarefa Comando de atalho Desmarque todo o texto da Janela de Saída. Limpar Tudo Copie o texto selecionado na Janela de Saída para a área de transferência. Copy Selecione todo o texto na Janela de Saída. Selecionar tudo Salve o texto contido na Janela de Saída em um arquivo especificado. Salvar em Arquivo
Saída de rastreamento de teste do conjunto de regras
Esta seção descreve as informações de acompanhamento e as atividades incluídas no rastreamento ao testar um conjunto de regras usando o Microsoft Rules Composer. A saída de rastreamento pode incluir os seguintes tipos de instrução:
- Atividade dos fatos
- Avaliação da condição
- Atualização da agenda
- Regra acionada
Atividade dos fatos
Essa atividade indica alterações nos fatos na memória de trabalho do mecanismo. O exemplo a seguir mostra uma entrada de atividade de fato de exemplo:
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:
Item | Descrição |
---|---|
Identificador de instância do mecanismo de regras | Um identificador exclusivo para a instância do RuleEngine que fornece o ambiente de execução para o acionamento 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: - Assert: um fato é adicionado à memória de trabalho. Observação: se o tipo de um fato declarado não corresponder a nenhum dos tipos usados no conjunto de regras, a função Assert mostrará o erro "Assert – Fato não Reconhecido". - Atualização: uma regra atualiza um fato, que deve ser reafirmado no mecanismo para reavaliação, com base nos novos dados e no estado. - Retrair: um fato é removido da memória de trabalho. |
Tipo de Objeto | O tipo de fato para uma atividade específica: - TypedXmlDocument As declarações são mostradas para instâncias de TypedXmlDocument pai e filho. |
Identificador de instância do objeto | A ID de instância exclusiva para a referência de fato. |
Avaliação da condição
Essa atividade indica o resultado da avaliação de predicados individuais. O exemplo a seguir mostra uma entrada de avaliação de condição de exemplo:
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:
Item | Descrição |
---|---|
Expressão de Teste | Uma expressão unária ou binária simples dentro de uma regra. |
Valor do operando à esquerda | O valor do termo para o lado esquerdo de uma expressão. |
Valor do operando à direita | O valor do termo para o lado direito de uma expressão. |
Resultado do teste | O resultado da avaliação, que é True ou False. |
Atualização da agenda
Essa atividade indica as regras que são adicionadas à agenda do mecanismo de regras para execução seguinte. 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:
Item | 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 para quando as ações são executadas e onde as ações de prioridade mais alta são executadas primeiro. |
Regra acionada
Essa atividade indica a execução das ações de uma regra. O exemplo a seguir mostra uma entrada de regra acionada:
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 na Ordem é alterado e o comando Atualizar é emitido para o mecanismo para o "Objeto da Ordem", causando reavaliação para a regra "Ship". Desta vez, a condição é avaliada como Truee a regra "Ship" é acionada.
Observação
Se suas regras estiverem gravadas incorretamente, o encadeamento de encaminhamento com a função Atualizar poderá causar um loop infinito. Nesse caso, ao testar o conjunto de regras no Microsoft Rules Composer, você receberá uma mensagem de erro com o texto "O mecanismo de regra detectou um loop de execução".
Regra InventoryCheck
IF Inventory.AllocateInventory == True
THEN Order.InventoryAvailable == True
Update(Order)
Regra do Ship
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 do 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 fato 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 foi declarada no mecanismo de regras. Com base no valor do Seletor XPath definido na regra, o mecanismo cria e afirma uma entidade TypedXmlDocument filho com o tipo chamado Microsoft.Samples.BizTalk.LoansProcessor.Case:/Root/EmploymentType, com base no tipo de documento e na cadeia de caracteres do seletor. Essa entidade TypedXmlDocument é avaliada como True na condição, causando uma atualização de agenda e acionamento de regras. As entidades TypedXmlDocument pai e filho são então retraídas.
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