Tests are not just there to test that what you wrote works. Tests are also there to test that what you wrote STILL works. Like, many years and many developers later. What you think is a dead simple class might in the future become more complicated.
For example, lets say it started with no filter. Just a simple get/set. Why test that? Then later some other developer adds in the regex filter, and its faulty. Then suddenly the class is broken, but its untested so nobody knows. This reveals itself as mysterious failures further up the call stack which now take more time to debug. Probably more than it would have taken to write a few tests.
And then, in the future, somebody's going to try and get clever and optimize your code. Or reformat it, regexes have a tendency to be written unreadable and can often do with some cleanup. This is ripe for subtle breakage. Small targeted unit tests will catch this.
In your example above, the regex is presumably there to filter for things that look like email addresses. That necessitates checking that regex is working, else your Email class stops accepting emails. Or it starts taking gibberish. Maybe your regex doesn't cover a valid email address, that's worth testing once you discover it. Eventually, somebody is going to replace your regex with an actual parser. Maybe it works, maybe it doesn't. A good test will have a simple list of valid and invalid email addresses which you can easily add to as corner cases are discovered.
Tests also allow you to exercise your interface and discover holes. What happens when you put in something that isn't an email address? That's right, nothing. Email.set silently throws away the input. Garbage in, nothing out isn't very polite. Maybe it should throw an exception. This is something that would quickly become clear as you're trying to test it, because it would be necessary to test whether the set worked.
Testing can also reveal inflexibilities and things which cannot be overriden or customized. In your example, it would be handy to test the regex filter directly rather than having to instantiate an object each time. This is because the filter is the most complicated bit, and its easier to test and debug while going through as few layers as possible. By putting it into Email.is_email_address
you can now test it directly. As a side-effect it can also be overriden in a subclass. This is handy because most people get email validation WRONG because EMAIL HATES THE LIVING!
Finally, you want your tests to be decoupled. Test one thing without it being effected by additional complexities so you can clearly see the root of the problem. Your Email class is an excellent candidate for a simple, decoupled unit test.