Conjuntos de regras de teste usando o Microsoft Rules Composer (Visualização)
Aplica-se a: Aplicativos Lógicos do Azure (Padrão)
Importante
Esta funcionalidade está em pré-visualização e está sujeita aos Termos de Utilização Suplementares para Pré-visualizações do Microsoft Azure.
À medida que você cria seu conjunto de regras para que possa integrar a lógica de negócios com seus fluxos de trabalho padrão, teste seu conjunto de regras incrementalmente ou antes de usar as regras em seu aplicativo. Dessa forma, você pode verificar se as regras funcionam da maneira esperada ao longo do caminho, ou você 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 suas regras todas ao mesmo tempo ou quando estiver pronto, e suas regras forem longas ou complexas, você poderá ter mais erros ou problemas do que pensava, o que pode levar mais tempo para ser resolvido ou ser difícil de solucionar.
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
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.
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.
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.
Para remover uma instância de fato, selecione o tipo de fato correspondente e, em seguida, selecione Remover instância.
Para adicionar um criador de fatos que você criou, na janela Criadores de fatos , selecione Adicionar.
Quando estiver pronto, selecione Testar.
A janela Saída mostra a saída de rastreamento de teste do conjunto de regras.
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:
Task Comando de atalho Limpe todo o texto da janela Saída. Apagar tudo Copie o texto selecionado na janela Saída para a área de transferência. Copiar Selecione todo o texto na janela Saída. Selecionar tudo Salve o texto contido na janela Saída em um arquivo especificado. Guardar no ficheiro
Saída de rastreamento de teste do conjunto de regras
Esta seção descreve as informações de controle e as atividades incluídas com o rastreamento quando você testa um conjunto de regras usando o Microsoft Rules Composer. A saída de acompanhamento pode incluir os seguintes tipos de instrução:
- 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 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 | Description |
---|---|
Identificador de instância do mecanismo de regra | Um identificador exclusivo para a instância RuleEngine que fornece o ambiente de execução para o disparo 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 As 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 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 | Description |
---|---|
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 para o 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:
Item | Description |
---|---|
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 regras forem escritas incorretamente, o encadeamento direto 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 fato de 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 Seletor 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. Esta entidade filho TypedXmlDocument é avaliada como True na condição, causando uma atualização de agenda e disparo de regra. As entidades TypedXmlDocument pai e filho são então recolhidas.
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