Hjertnes.blog

Write code with tests in mind

January 27, 2019

You can write code in many different ways, some of them are more testable than other, even though many of the less testable ways are not bad or anyting like that. Like mutating a reference value like when something takes a output pointer etc. Or having most of the code in the controller.

None of these are “bad”. But it makes it harder to write unit tests for it.

If you think something is good, then try to make it as easy as possible to do it.

I don’t do test driven development, because I don’t think it is the best way to work. But I do think that writing unit and integration tests should be a part of the process, because having good tests and coeverage will save you time in the long run. And it is a must if you want to move to the next level and get into automated deployments.

If you start with a typical C# .NET Core REST API. Then you could do everything in the Controller. It would work well. And the code could be clean. Probably a little or a lot of duplication of code but still it could work.

The problem with this approach however is that there is nothing you can unit test, because everything is tied together. Then you are limited to integration tests.

What I usually do is that I take the Controller and I limit it to validating input, checking permissions (ideally done with attributes and filters) and calling a “service”.

The services takes input from the controller and is in charge of checking all the right things, doing all the correct operations and preparing the data structure the API should return.

Then all SQL stuff, and all the Redis stuff etc are put into repositories. And the classes that takes data and turn into something else are done in builder classes.

All of this are tied together with as many static methods as possible (where it is possible) and dependency injection.

The advantage of this approach is that you can actually write tests for the controller without it showing up in the database. And the same goes for the service and the builders. Because you can just fake the dependency injection crap.

If you want to have a project where most of the code is covered by tests, then you need to write the code in a way where it is possible.

Link dump

January 26, 2019

The Zelda Book

January 19, 2019

Zelda Breath of the Wild is a nuts game. It was the first game I got for my Switch, and it is one of those games I obsess about in certain periods.

It is a really hard game, and a big game. The thing about Zelda is that it is a game where you, after the first part, can do shit in more or less what ever order you want. This means that a lot of it is to figure out stuff to do.

It is not like Pokemon where you have a order, and a lot of side stuff. In Zelda there are some orders you have to do stuff, but there are also a lot of variations to the order you can do the different things.

In order to make stuff a little bit easier on myself I got this huge ass coffee table book on Zelda.

If you’re into Zelda, I’d get it. Both because it is cool, and because it makes the game easier and less confusing.

Great Switch Games

January 18, 2019

This list contains 5 awesome games to get for your Nintendo Switch, in different categories.

  • Your first game: Super Mario Odessy: not super hard, but freaking awesome.
  • Your second game: Donkey Kong: very hard but a lot of fun.
  • The best: Zelda: I think this is one of the best games Nintendo have made, if not the best.
  • Interesting: Splatoon 2. It is so awesome.
  • Indie: Mounument Valley: this game is so good. A masterpiece by one crazy guy.

Links

January 17, 2019

It’s a little bit weird, but I always think I don’t read much in Instapaper, but when I empty out my likes it always turns out to be a lot more than I thought.

Links

January 10, 2019

I have been thinking a lot about how to share links over the last couple of months. My old style was to add a post for each link. The reason I used to do that was because it started as a Micropub like, and I just kept doing it after I moved away from using Micropub. I have decided that I as a reader would prefer that someone collected them and posted it in one larger post instead of many smaller ones.

The way I consume content online these days is that anything that looks even a little bit interesting are sent to Instapaper, and the stuff I think was interesting or cool are marked as a favourite there. So what I am going to do is that once a week I’ll empty out my likes from Instapaper and share them here.