Write a program that will determine the type of a triangle.
It should take the lengths of the triangle's three sides as input, and return whether the triangle is equilateral, isosceles or scalene.
Solutions should showcase problem solving skills and structural considerations that can be applied to larger and potentially more complex problem domains. Special attention should be given to tests, readability of code and error cases.