in-code assertions are usually used in the beginning of a method, in order to confirm that certain pre-conditions were met, before entry of this particular function
for example:
Window::paint()
{
assert(m_device != NULL);
m_device->repaintRegion();
}
they are here primarily to catch bugs of unmet dependencies between methods or classes.
assertions in testing frameworks are differnt and usually used for unit testing, to make sure that the unit returned whatever it needed to return.
exceptions should be thrown usually where reality (i.e external systems) provided us with a case the code cannot/should not handle. its an easy way out for rare but still expected problems. for example - a time out waiting for a server usually available. or, not enough memory. I would not use it as an aid for programming logic.
to your question, there might be a way to catch exceptions in testing frameworks by surrounding the unit tested with try-catch. but i'm not sure if its really desirable.
HTH