An eval has four parts. First, a fixed and versioned set of cases, each one an input plus a label that says what good looks like. Second, the system under test, meaning your prompt, model, retrieval and tools. Third, the output the system produced. Fourth, a scorer, which judges the output and returns a score with a reason.
The scorer is where evals differ from normal software tests. A unit test checks one exact answer, such as add(2, 2) must equal 4. LLM output is open-ended, so a hundred different summaries of one support ticket can all be correct, and the same question asked twice can come back in different words. There is no single correct string to compare against, so the scorer judges a property instead: is this summary faithful to its source, and does this answer address the question that was asked?
In practice, scorers come in three kinds. Simple rules check things like length, language or JSON shape. Reference checks compare against a known fact. An LLM-as-judge is a second model that scores the output against a written rubric, which scales to thousands of cases cheaply but is only worth trusting after you compare its grades with careful human labels on the same cases.