One of the best solution is to use ippserver. It comes with CUPSv2.2.2 and higher. You can alternatively get the project from here: IPP sample implementations.
According to the description on the manual page:
ippserver is a simple Internet Printing Protocol (IPP) server conforming to the IPP Everywhere and IPP Shared Infrastructure Extensions (INFRA) specifications. It can be used as a standalone print server and/or a very basic infrastructure server between standard IPP clients and IPP proxies conforming to the INFRA specification.
To use it, all you need to do is run ippserver "My cool printer", and it will create a virtual printer with the name My cool printer for you. It runs like a web server and listens on specific ports.
In case you need multiple printers, you can run the server on multiple ports using ippserver "My other cool printer" -p 8888.
You can even supply printer attributes using an attributes file. For instance, your printer supports by default high quality prints, you can add the following attribute in the attributes file:
ATTR enum print-quality-default high
and run the server using:
ippserver "My high quality cool printer" -a attributes-file.txt
References:
- PWG IPP Sample
- CUPS ipptoolfile man page