This is the biggest challenge. What I find works is separating your orchestrations from your data processing.
For example, instead of creating one class that does the network call, and processes the JSON response, break these out.
One class does the network call (keep it extremely thin). Dependency inject stuff in if you want. But view this purely as an orchestration.
if (connectionValid)
json = makeNetworkCall
anotherObject.processJson(json) <- test separately
end
Then, in the other plain old data process class, do you heavy off-by-one edge case testing there.
If the first case, the orchestration, I can write tests like "One make the network call if the connection is valid". But that's all that test would do.
I am at the point now where I actually don't even test that. I assume that is going to work, because it is so simple. That and I generally hate mocking. Way too much coupling. Way too hard to refactor.
Where I do test heavy is on the plain old object side, that has no outside ports or connectors. These are just plain old objects.
I agree with some other comments I have ready here. Mocking is a bitch and I generally don't like it. But it's there if I needed it, so I do use it occasionally.
But it has so many downsides I try not to. Instead I separate the orchestrations from the processing. Unit test the processing (in an integration test sort of way), and try to stick to testing the public APIs of my class, so I am free to change the internals without things breaking.
Break through the blocks and win your inner creative battles.
Many books mentioned here are good, this is the only I haven't seen referenced. But this one book really helped me deal with resistance and get stuff done. Seth Godin is a big fan and references it a lot in his material.
Steven Pressfield also wrote 'The Legend of Bagger Vance' and Gates of Fire (Spartan 300 kind of book but way deeper).
It's not all bad: The California proposition to legalize marijuana was defeated in yesterday's election, which should help maintain demand for BC Gold dope.
Not too long ago I heard stories from my friends that China started to buy natural resources based company around the world. Some target: Mining companies in Australia, Wood/Lumbers companies in BC. etc
First off - good for you for trying something. Thanks awesome.
Takes a lot of guts and hard work to put something out there so hats off to you for that.
As far as feedback, I think the Take a Tour screen is begging for a picture or something to show me at a glance how it works.
I would try to add more pictures to the site as it is currently all text (at least what I saw). Even it is just a piggy bank or something - show me how I am going to save money. Or make me feel the pain.
But I think a picture would really spruce things up.
My degree was in Maths/Comp-Sci, and as a result, I didn't have some of the courses I wanted open to me on CS due to clashes with compulsory Maths modules for some lectures. Me and a friend ended up sitting at the back of the 50% we could attend (on Networking), and doing a bit of work. After an interview with the prof we were allowed onto the subsequent modules that required the course, despite having never sat the exam...in his words, "It's your degree if you fail it.."
His card decks (Creative Whack Pack, Innovative Whack Pack and Ancient Whacks of Heraclitus) are also very useful for breaking bad habits, generating ideas, divergent thinking etc. somewhat like Brian Eno's Oblique Strategies cards,which I recommend (http://www.rtqe.net/ObliqueStrategies/)
EDIT: I'd also recommend Organizing from the Right Side of the Brain "http://www.amazon.com/Organizing-Right-Side-Brain-Organized/... for tips on how creative types organize their workspaces. Handy if you're right brained, a pack rat, like "messy" workspaces or dislike the anal-retentiveness of Getting Things Done.
For example, instead of creating one class that does the network call, and processes the JSON response, break these out.
One class does the network call (keep it extremely thin). Dependency inject stuff in if you want. But view this purely as an orchestration.
if (connectionValid) json = makeNetworkCall anotherObject.processJson(json) <- test separately end
Then, in the other plain old data process class, do you heavy off-by-one edge case testing there.
If the first case, the orchestration, I can write tests like "One make the network call if the connection is valid". But that's all that test would do.
I am at the point now where I actually don't even test that. I assume that is going to work, because it is so simple. That and I generally hate mocking. Way too much coupling. Way too hard to refactor.
Where I do test heavy is on the plain old object side, that has no outside ports or connectors. These are just plain old objects.
I agree with some other comments I have ready here. Mocking is a bitch and I generally don't like it. But it's there if I needed it, so I do use it occasionally.
But it has so many downsides I try not to. Instead I separate the orchestrations from the processing. Unit test the processing (in an integration test sort of way), and try to stick to testing the public APIs of my class, so I am free to change the internals without things breaking.
My 2c. Hope that helps.