How do I test NewSoftSerial?
You're probably not doing anything wrong, but you are hitting a limitation of the library.

NewSoftSerial disables interupts on transmission, to ensure clean timing of the transmitted byte. As NSS receives data by picking up an interrupt on the receive pin, that interupt isn't fired, meaning nothing is received. 

For reference, the write(byte) function of NSS

void NewSoftSerial::write(uint8_t b)
{
      //irrelevant code

  uint8_t oldSREG = SREG;
  cli();  // turn off interrupts for a clean txmit

  // Write the start bit
  tx_pin_write(_inverse_logic ? HIGH : LOW);
  tunedDelay(_tx_delay + XMIT_START_ADJUSTMENT);

      //code to send a byte, omitted for brevity

  SREG = oldSREG; // turn interrupts back on
  tunedDelay(_tx_delay);
}


And the recv function:

void NewSoftSerial::recv()
{
  uint8_t d = 0;

  // If RX line is high, then we don't see any start bit
  // so interrupt is probably not for us
  if (_inverse_logic ? rx_pin_read() : !rx_pin_read())
  {
    // Wait approximately 1/2 of a bit width to "center" the sample
    tunedDelay(_rx_delay_centering);

    // Read each of the 8 bits
    for (uint8_t i=0x1; i; i &lt;&lt;= 1)
    {
      tunedDelay(_rx_delay_intrabit);
      uint8_t noti = ~i;
      if (rx_pin_read())
        d |= i;
      else // else clause added to ensure function timing is ~balanced
        d &amp;= noti;
    }

    // skip the stop bit
    tunedDelay(_rx_delay_stopbit);

            //buffer code omitted
  }
}


Two things to note: both routines assume they'll have control while sending/receiving. Basically, NSS is half duplex, no simultaneous read and write.

If you want to test it, what you could do is tie the RX pin from the arduino (pin 0 I think; will be TX of the USB serial chip) to RX of NSS. What this will do is any data coming down from USB serial will be sent to both Serial and NSS. You can then transmit the NSS received data using Serial. Should work, but has not been tested.