// Source code snippet
// The user's name
private String name = "Java";
// LST representation
J.VariableDeclarations | "// The user's namenprivate String name = "Java""
|---J.Modifier | "private"
|---J.Identifier | "String"
---J.VariableDeclarations.NamedVariable | "name = "Java""
|---J.Identifier | "name"
---J.Literal | ""Java""
As receitas funcionam com muitos tipos de arquivos diferentes, incluindo XML ou YAML, para modificar coisas como Maven POMs ou outros arquivos de configuração. Eles também podem criar novos arquivos quando necessário, como parte das migrações. Mas as receitas nem precisam modificar o código. Um recurso e benefício poderoso dos dados ricos do LST é que eles podem apenas coletar dados e insights, analisando bases de código para gerar tabelas de dados a serem usadas em relatórios, métricas ou visualizações que ajudam as equipes a entender seu código antes de fazer alterações.
Receitas de teste: determinísticas e confiáveis
A natureza determinística do OpenRewrite torna as receitas fáceis de testar. Veja como é simples visualizar as alterações que uma receita deve fazer e verificar se ela funciona corretamente:
@Test
void migrateJUnitTest() {
rewriteRun(
// The recipe to test
new MigrateToJUnit5(),
// Before: JUnit 4 code
java("""
import org.junit.Test;
public class MyTest {
@Test
public void testSomething() {}
}
"""),
// After: Expected JUnit 5 result
java("""
import org.junit.jupiter.api.Test;
public class MyTest {
@Test
public void testSomething() {}
}
""")
);
}
Essa estrutura de teste valida que a receita produz exatamente o resultado esperado – nem mais, nem menos. Como as receitas são determinísticas, a mesma entrada sempre produz o mesmo resultado, tornando-as confiáveis e testáveis em escala.
