What are unit testing and integration testing, and what other types of testing should I know about?

Off the top of my head:

  • Unit testing in the sense of "testing the smallest isolatable unit of an application"; this is typically a method or a class, depending on scale.
  • Integration testing
  • Feature testing: this may cut across units, and is the focus of TDD.
  • Black-box testing: testing only the public interface with no knowledge of how the thing works.
  • Glass-box testing: testing all parts of a thing with full knowledge of how it works.
  • Regression testing: test-cases constructed to reproduce bugs, to ensure that they do not reappear later.
  • Pointless testing: testing the same basic case more than one way, or testing things so trivial that they really do not need to be tested (like auto-generated getters and setters)

should I be aware of any other important testing of my code?

These are some of the different kinds of test, according to different phases of the software lifecycle:

  • Unit test: does this little bit of code work?
  • Unit test suite: a sequence of many unit tests (for many little bits of code)
  • Integration test: test whether two components work together when they're combined (or 'integrated')
  • System test: test whether all components work together when they're combined (or 'integrated')
  • Acceptance test: what the customer does to decide wheher he wants to pay you (system test discovers whether the software works as designed ... acceptance test discovers whether "as-designed" is what the customer wanted)

There's more:

  • Usability test
  • Performance test
  • Load test
  • Stress test

And, much more ... testing software is nearly as wide a subject as writing software.


MSDN: Unit Testing

The primary goal of unit testing is to take the smallest piece of testable software in the application, isolate it from the remainder of the code, and determine whether it behaves exactly as you expect. Each unit is tested separately before integrating them into modules to test the interfaces between modules. Unit testing has proven its value in that a large percentage of defects are identified during its use.

MSDN: Integration Testing

Integration testing is a logical extension of unit testing. In its simplest form, two units that have already been tested are combined into a component and the interface between them is tested. A component, in this sense, refers to an integrated aggregate of more than one unit. In a realistic scenario, many units are combined into components, which are in turn aggregated into even larger parts of the program. The idea is to test combinations of pieces and eventually expand the process to test your modules with those of other groups. Eventually all the modules making up a process are tested together. Beyond that, if the program is composed of more than one process, they should be tested in pairs rather than all at once.

Check sites for more information. There is plenty of information out there as well from sources other than Microsoft.