I am performing validation tests for numerous fields on an object, each of which has numerous validation rules (required, integer, unique etc.). Rather than writing a test function for each field and rule, I have a data provider which is supplied to a generic test function.
A contrived example of the data provider:
public function validationErrorsProvider()
{
return [
[ 'field', 'input', 'error message' ],
[ 'field', 'input', 'error message' ],
[ 'field', 'input', 'error message' ],
];
}
The data provider is then used by a generic test method which asserts that for field with input it sees the error message.
/**
* @test
* @dataProvider validationErrorsProvider
*/
public function will_fail_with_errors_when_input_is_invalid($field, $input, $error)
{
// do some stuff
}
This works fine but the data provider is becoming increasingly large as I add further fields and rules to be tested (20 - 30 elements in the validationErrorsProvider array). It appears more complicated that some of my tests.
Is this just something that happens, or is there an alternative? I have considered splitting the data provider into multiple providers, each holding just the data for a given field. This doesn't do anything other than make the data provider appear smaller.