Hi Thushar,
if a test case fails the further steps inside a test case are not executed. It is implemented this way because most of the time test steps are related to each other and proceeding on failure does not make sense anymore. If your test steps are not related to each other than think about creating dedicated test cases for those.
Teardown() is called inside a test case regardless whether a step has failed or not at the execution end of the test case. This should be used to cleanup and reset possible global GUI states. To use this, cou can override this method in you test case.
Best regards,
Julian